我有一个像这样的字符串
"quick" "brown" fox jumps "over" "the" lazy dog
我需要一个正则表达式来检测未用双引号括起来的单词。经过一些随机尝试后,我发现了("([^"]+)")
。这会检测用双引号括起来的字符串。但我希望相反。在试图扭转上面提到的正则表达式后,我真的无法想出它。正则表达式我很弱。请帮帮我
答案 0 :(得分:30)
使用lookahead / lookbehind断言:
(?<![\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
答案 1 :(得分:0)
从字符串
中删除第一个引号答案 2 :(得分:0)
使用此正则表达式:
\s+(?<myword>([^\"\s]+)*)\s+
这应该是有效的;并获得名为 myword 的组。否则你需要修剪你的结果字符串。