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

时间:2012-07-04 07:56:14

标签: regex

我有一个像这样的字符串

"quick" "brown" fox jumps "over" "the" lazy dog

我需要一个正则表达式来检测未用双引号括起来的单词。经过一些随机尝试后,我发现了("([^"]+)")。这会检测用双引号括起来的字符串。但我希望相反。在试图扭转上面提到的正则表达式后,我真的无法想出它。正则表达式我很弱。请帮帮我

3 个答案:

答案 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 的组。否则你需要修剪你的结果字符串。