12

我有一个这样的字符串

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

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

4

3 回答 3

32

使用前瞻/后瞻断言:

(?<![\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 
于 2012-07-04T08:05:20.343 回答
0

使用这个正则表达式:

\s+(?<myword>([^\"\s]+)*)\s+

这应该是工作;并获得名为myword的组。否则你需要修剪你的结果字符串。

于 2012-07-04T08:03:15.417 回答
-3

从字符串中删除第一个引号

于 2012-07-04T08:03:06.667 回答