我认为这是一件普通而且容易做的事情,但到目前为止,我一直无法通过谷歌搜索找到答案。
如果没有紧跟在特定字符串前面的,那么我如何才能匹配子字符串 ?
在这种情况下,我希望匹配 "
(空格后跟引号),但前提是它前面没有,
(逗号)。我尝试了一些不同的东西。目前(?!,) "
已经接近我了,但负面的前瞻似乎没有按照我的预期发挥作用。
我想要的一些例子:
Laura said "What have you done?" - 1 match
Laura said, "What have you done?" - 0 matches (there's a comma)
"Come with me," David said. - 0 matches (no space before the ")
Michael said "Throw it!" Jessica replied, "I'd rather not..." Shia shouted "Just do it!"
- 2 matches
这是在Notepad ++中。我做错了什么?
答案 0 :(得分:2)
您可以使用双断言来应用两个条件。
(?<= )(?<!, )"
(?<= )
- &gt;正面的lookbehind断言断言要匹配的字符必须以空格字符开头。
(?<!, )
- &gt;负面观察,断言要匹配的字符前面不能有,<space>
个字符。
"
- &gt;只有在两个条件都满足时才匹配双引号。
或强>
(?<=[^,] )"|(?<=^ )"
(?<=[^,] )"
- &gt;肯定的lookbehind,断言双引号必须在
[^,]
请注意,此正则表达式不会匹配前面有一个空格字符的双引号,就像这个*
一样。为了匹配行开头处的引号,我们必须使用其他条件,如
(?<=^ )"
匹配前面带引号,
^
开始行。<space>
字符使用|
OR运算符对这两个条件进行OR运算,可以达到预期的结果。
如果你想匹配前面的空格,那么从先行断言中删除空格。
(?<!,) "
(?<!,)
声称要匹配的字符前面不会有,
。
答案 1 :(得分:1)
这似乎对我有用,在Notepad ++中进行了测试:
[^,]\K "