如果子不是由特定字符串开头的正则表达式匹配的子串?(Regex match a substring

2019-09-30 19:07发布

我认为这将是做一个共同的和容易的事情,但到目前为止,我一直无法找到谷歌搜索答案。

如何将我的正则表达式匹配的子串, 只有当它不立即通过特定字符串开头?

在这种情况下,我想匹配" (一个空格,接着引号),但只有当它不是由之前, (逗号)。我已经尝试了一些不同的东西。目前(?!,) "是接近我已经得到了,但负先行似乎并不奏效,因为我期望的那样。

我想要的一些例子:

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

这是记事本+ +。 我究竟做错了什么?

Answer 1:

这似乎为我工作,在记事本++测试:

[^,]\K "


Answer 2:

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

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

(?<= ) - >正向后断言,它断言的字符要被匹配必须由一个空格字符之前。

(?<!, ) - >否定回顾后,它断言的字符要被匹配必须不是由前面,<space>字符。

" - >匹配只有在两个条件得到满足双引号。

要么

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

(?<=[^,] )" - >正回顾后,它断言双引号必须由preceeded

  • 任何字符但不是, [^,]
  • 后面有一个空格字符

并注意这个正则表达式不会匹配一个空格字符前面一个双引号存在于线开始喜欢这个* 。 在-为了匹配报价存在于线开始,我们必须使用像另一个条件

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

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

在或运算与这两个条件| OR运算符,就可以达到预期的效果。

DEMO

如果你也想匹配前面的空格然后向前断言删除空格。

(?<!,) "

(?<!,)断言去的字符要被匹配将不受前面,

DEMO



文章来源: Regex match a substring if that substring is not preceded by a specific string?