我有一个这样的字符串
"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"]
。
通常有四种不同的断言类型:
(?=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的组。否则你需要修剪你的结果字符串。
从字符串中删除第一个引号