我有一个像这样的字符串
"quick" "brown" fox jumps "over" "the" lazy dog
我需要一个正则表达式来检测没有用双引号括起来的单词.经过一些随机尝试,我发现了这个("([^"]+)").这会检测用双引号括起来的字符串.但我希望相反.在试图扭转上面提到的正则表达式后,我真的无法想出它.正则表达式我很弱.请帮我
Igo*_*bin 30
使用lookahead/lookbehind断言:
(?<![\S"])([^"\s]+)(?![\S"])
Run Code Online (Sandbox Code Playgroud)
例:
>>> import re
>>> a='"quick" "brown" fox jumps "over" "the" lazy dog'
>>> print re.findall('(?<![\S"])([^"\s]+)(?![\S"])',a)
['fox', 'jumps', 'lazy', 'dog']
Run Code Online (Sandbox Code Playgroud)
这里的主要内容是前瞻/后瞻断言.你可以说:我想在表达式之前使用这个符号,但我不希望它成为匹配本身的一部分.好.为此您使用断言:
(?<![\S"])abc
Run Code Online (Sandbox Code Playgroud)
这是一个负面的背后隐藏.这意味着你想abc,但没有[\S"] 之前它,这意味着必须有没有非空格字符(字开头)或"之前.
这是相同的,但在另一个方向:
abc(?![\S"])
Run Code Online (Sandbox Code Playgroud)
这是一个负面的预测.这意味着你想abc,但没有[\S"] 经过它.
一般来说,这种类型有四种不同的断言:
(?=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
Run Code Online (Sandbox Code Playgroud)