我有一个字符串像这样一个正则表达式的检测字符串不包括在双引号
"quick" "brown" fox jumps "over" "the" lazy dog
我需要一个正则表达式来检测不括在双引号的话。经过一些随机尝试后,我发现这个("([^"]+)")
。这会检测用双引号括起来的字符串。但我想要的是相反的。即使尝试颠倒上面提到的正则表达式,我也无法想出它。正则表达式我很弱。请帮我
我有一个字符串像这样一个正则表达式的检测字符串不包括在双引号
"quick" "brown" fox jumps "over" "the" lazy dog
我需要一个正则表达式来检测不括在双引号的话。经过一些随机尝试后,我发现这个("([^"]+)")
。这会检测用双引号括起来的字符串。但我想要的是相反的。即使尝试颠倒上面提到的正则表达式,我也无法想出它。正则表达式我很弱。请帮我
使用前瞻/向后断言:
(?<![\S"])([^"\s]+)(?![\S"])
例子:
>>> import re
>>> a='"quick" "brown" fox jumps "over" "the" lazy dog'
>>> print re.findall('(?<![\S"])([^"\s]+)(?![\S"])',a)
['fox', 'jumps', 'lazy', 'dog']
这里最主要的是向前看/后向断言。你可以说:我在表达式之前需要这个符号,但我不希望它成为匹配本身的一部分。好。对于您使用断言:
(?<![\S"])abc
这是一个负回顾后。这意味着你想要abc
但没有[\S"]
之前它,这意味着在之前必须没有非空格字符(开头的字)或"
。
即相同的,但在其他方向:
abc(?![\S"])
这是一个负先行。这意味着你想要abc
但是没有[\S"]
之后吧。
有型四种differenet断言一般:
(?=pattern)
is a positive look-ahead assertion
(?!pattern)
is a negative look-ahead assertion
(?<=pattern)
is a positive look-behind assertion
(?<!pattern)
is a negative look-behind assertion
从字符串
使用删除第一个引用这个表达式:
\s+(?<myword>([^\"\s]+)*)\s+
这应该是工作;并获得组名为myword。否则你需要修剪你的结果字符串。
工作的话只有一个空格:'狐狸跳'例如 –
你可以匹配所有字符串,一个引述'“'和'添加为NOT'此过滤器:) – gaussblurinc
所以你要这抓住'狐狸跳跃懒狗'? – jared
@jared:是一样的 – Shades88