正则表达式否定回溯到行中的任何位置

regex negative lookback to anywhere in the line

我正在尝试创建一个与 Notepad++ 一起使用的正则表达式,以在行中的任何位置查找特定字符,但不捕获它,同时仍然捕获我想稍后在字符串中查找的内容。

我正在查看的样本是这样的:

GroundFogIntensityRange: [0.03, 0.08]
Stamps:
    - CraterLava_2, 0.1
    - CraterLava_3_BM, 0.8
    Decorations:
               - [Snakeweed, 0.003]
               - [RockResourceNeodymium, 0.001, Free]
               - [RockResourceCopper, 0.0002, Free]
               - [RockResourceIron, 0.00025, Free]
               - [RockResourceCopper, 0.001, Free]

这是 Empyrion 动态行星配置的配置文件。

目标是能够找到我的光标并将其放在一个容易编辑装饰线中的小数点的位置。我最初的尝试是删除任何包含“:”字符的行。

(?<!\:)-\s\[.*,\s0\.

以前在分隔块元素时尝试消除部分开头时起作用。然而,这是一个失败,因为它只查找匹配之前的角色是否存在。它会跳过“:”之后的 space,但会继续匹配其他所有内容。

我试图让它在字符串中的任何位置查找坏字符,而不仅仅是在我要查找的匹配项之前。我一直在网上搜索重复回顾,发现任何尝试这样做的人都没有结果。我无法相信如果字符在字符串中的任何位置之前都无法跳过匹配项。

另一种尝试是尝试正向匹配但不捕获集合 '-\s[.*,\s0.'但显然前瞻和回顾不允许我在其中使用多个字符而不会失败。我要么在进行正面回顾时得到零个匹配项,要么在尝试将回顾中的内容组合在一起时,它只是选择了整个匹配项。

如果我用 C# 编写一个程序来获取字符串,然后删除其中的一部分,直到我得到我想要的,我就可以做到这一切,但这不会让我在文本编辑器中将光标放在它上面为了便于手动编辑,可以吗?

我是否遇到了正则表达式搜索的障碍,或者这是否可能实现?

您可以使用

(?<!:)-\h*\[.*,\h\K0\.

详情:

  • (?<!:) - 一个没有紧跟 : char
  • 的位置
  • - - 一个连字符
  • \h* - 零个或多个水平空格
  • \[ - 一个 [ 字符
  • .* - 除换行字符外的零个或多个字符,尽可能多
  • , - 逗号
  • \h - 水平空格
  • \K - 丢弃到目前为止匹配的文本的匹配重置运算符
  • 0\. - 0. 文字