繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM