[英]A regex to detect a word and a string that is not enclosed in double quotes
[英]A regex to detect string not enclosed in double quotes
我有一个像这样的字符串
"quick" "brown" fox jumps "over" "the" lazy dog
我需要一个正则表达式来检测没有用双引号括起来的单词。 经过一些随机的尝试,我发现了这个("([^"]+)")
。这检测到一个用双引号括起来的字符串。但是我想要相反。即使在试图反转上面的内容之后,我真的无法想出它提到的正则表达式。我在正则表达式上很弱。请帮助我
使用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
从字符串中删除第一个引号
使用这个正则表达式:
\s+(?<myword>([^\"\s]+)*)\s+
这应该是有效的; 并获得名为myword的组。 否则你需要修剪结果字符串。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.