用于检测未用双引号括起来的字符串的正则表达式

Sha*_*s88 11 regex

我有一个像这样的字符串

"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)