我有一个类似这样的字符串
“快”“棕色”狐狸跳过“”“懒”狗
我需要一个正则表达式来检测未用双引号引起来的单词。经过一些随机尝试后,我发现了这个 ("([^"]+)")
。这检测到用双引号括起来的字符串。但我想要相反的。我真的想不出它即使在尝试反转上述正则表达式之后。我在正则表达式方面很弱。请帮助我
最佳答案
使用前瞻/后瞻断言:
(?<![\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']
这里的主要内容是lookahead/lookbehind断言。您可以说:我希望这个符号位于表达式之前,但我不希望它成为匹配本身的一部分。好的。为此,您使用断言:
(?<![\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
关于regex - 用于检测未用双引号引起来的字符串的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11324749/