【问题标题】:Negative lookahead not working负前瞻不起作用
【发布时间】:2014-11-15 15:40:48
【问题描述】:

我正在尝试使用 sublime 使用正则表达式修复文本文件

文本有

的实例
.. "description": "some description", "address": "some address", ... 

由于某种原因,我的实例看起来像

.. "description": "some description", "some address", ... 

所以我想找到那些有问题的并插入"address":。

我正在尝试使用

进行负前瞻来做到这一点
\"description\":\s*\".*?\"\,\s*(?!\"address\"\:)

但它会找到每个实例,而不仅仅是description 后面没有address

我做错了什么?

【问题讨论】:

  • 幸好这不是一个崇高的文本错误,否则它永远不会被修复!你让我吓了一跳。

标签: regex regex-lookarounds


【解决方案1】:

你的模式的问题是最后一个\s*,在否定前瞻将模式抛出之前,试试这个

(\"description\":\s*\"[^"]*\"\,)(?!\s?\"address\"\:)

并替换为$1"address":
Demo

(                   Capturing Group \1
  \"                """
  description           "description"
  \"                """
  :                 ":"
  \s                <whitespace character>
  *                 (zero or more)(greedy)
  \"                """
  [^"]              Character not in [^"]
  *                 (zero or more)(greedy)
  \"                """
  \,                ","
)                   End of Capturing Group \1
(?!                 Negative Look-Ahead
  \s                <whitespace character>
  ?                 (zero or one)(greedy)
  \"                """
  address               "address"
  \"                """
  \:                ":"
)                   End of Negative Look-Ahead

【讨论】:

    【解决方案2】:

    你可以搜索这个正则表达式:

    ("description":\s*"[^"]*\"\s*,\s*")(?!address")([^"]*".*$)
    

    并替换为:

    $1address": "$2
    

    RegEx Demo

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 2017-04-22
      • 2019-03-30
      • 2020-06-11
      • 1970-01-01
      相关资源
      最近更新 更多