我有一个像这样的字符串
"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"])
这是一个负面的预测 . 这意味着你想要 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的组 . 否则你需要修剪你的结果字符串 .
3 回答
使用lookahead / lookbehind断言:
例:
这里的主要内容是前瞻/后瞻断言 . 你可以说:我想在表达式之前使用这个符号,但我不希望它成为匹配本身的一部分 . 好 . 为此您使用断言:
这是一个负面的背后隐藏 . 这意味着你想要
abc
但在它之前没有[\S"]
,这意味着必须没有非空格字符(单词的开头)或之前的"
.这是相同的,但在另一个方向:
这是一个负面的预测 . 这意味着你想要
abc
但没有[\S"]
之后 .一般来说,这种类型有四种不同的断言:
从字符串中删除第一个引号
使用这个正则表达式:
这应该是有效的;并获得名为myword的组 . 否则你需要修剪你的结果字符串 .