我有一个大的csv文件,我需要捕获一行(6或更少)的前几个单词。我在记事本++中使用替换,我有这个正则表达式。
^((\w+\S+)\s+){1,6}.*$ (My 'replace with' text is \1...)
我的问题是,如果一行少于6个单词,它将影响下一行。
例如:如果我在此文本上运行替换:
one two three four five six
one two three four
one two three four five six
one two three four five six
我得到的是这个结果:
one two three four five six...
one two three four
one two...
one two three four five six...
这是我追求的结果:
one two three four five six...
one two three four...
one two three four five six...
one two three four five six...
非常感谢任何帮助。
答案 0 :(得分:2)
\s
包含换行符。请改为(?:(?!\n)\s)
或[^\S\n]
:
^((\w+\S+)[^\S\n]+){1,6}.*$
此外,这包括以下空格,因此不会匹配具有正好六个单词的行。试试这个:
^((?:\w+\S*)(?:[^\S\n]+(\w+\S*)){0,5}).*$
答案 1 :(得分:1)
我做:
找到:^((?:\S+\h){6}).*$
替换为:$1
这将删除第六个单词后出现的所有内容。少于6个单词的行将保留原样。
\h
代表水平空格。
\w+\S+
可以缩减为\S+
,如果它不符合您的需求,请保留\w+\S+
确保您没有选中dot matches newline