如果子字符串前面没有特定字符串,正则表达式匹配子字符串?

时间:2018-01-03 05:32:43

标签: regex notepad++

我认为这是一件普通而且容易做的事情,但到目前为止,我一直无法通过谷歌搜索找到答案。

如果没有紧跟在特定字符串前面的,那么我如何才能匹配子字符串

在这种情况下,我希望匹配 "(空格后跟引号),但前提是它前面没有,(逗号)。我尝试了一些不同的东西。目前(?!,) "已经接近我了,但负面的前瞻似乎没有按照我的预期发挥作用。

我想要的一些例子:

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 ++中。我做错了什么?

2 个答案:

答案 0 :(得分:2)

您可以使用双断言来应用两个条件。

(?<= )(?<!, )"

(?<= ) - &gt;正面的lookbehind断言断言要匹配的字符必须以空格字符开头。

(?<!, ) - &gt;负面观察,断言要匹配的字符前面不能有,<space>个字符。

" - &gt;只有在两个条件都满足时才匹配双引号。

(?<=[^,] )"|(?<=^ )"

(?<=[^,] )" - &gt;肯定的lookbehind,断言双引号必须在

之前
  • 任何字符,但不是[^,]
  • 后跟空格字符

请注意,此正则表达式不会匹配前面有一个空格字符的双引号,就像这个*一样。为了匹配行开头处的引号,我们必须使用其他条件,如

(?<=^ )"匹配前面带引号,

  • ^开始行。
  • <space>字符

使用| OR运算符对这两个条件进行OR运算,可以达到预期的结果。

DEMO

如果你想匹配前面的空格,那么从先行断言中删除空格。

(?<!,) "

(?<!,)声称要匹配的字符前面不会有,

DEMO

答案 1 :(得分:1)

这似乎对我有用,在Notepad ++中进行了测试:

[^,]\K "