不以特定单词开头的正则表达式

Regex for not starting with specific word

我尝试在每个没有开头 [string]: 的单词前添加 Line: 开头所以我做了这个正则表达式 ^(?![^:]+:) https://regex101.com/r/oMF8ks/1

如果我写

1
2
3

它returns我想要的

Line:1
Line:2
Line:3

Line:1
Line:2
Line:3

它returns和想要的一样

但是当我尝试在 https://regex101.com/r/K0z3bc/1

上应用它时出现问题
1 : A
2 : B
3 : C

我预计

Line:1 : A
Line:2 : B
Line:3 : C

但我只有

1 : A
2 : B
3 : C

但是当我将正则表达式更改为 ^(?!Line:) https://regex101.com/r/49i9tQ/1 时它可以工作,但我希望它适用于所有单词而不仅仅是 Line

您可以使用

^([^:\s]++)(?!:)

并替换为 Line:

参见regex demo详情:

  • ^ - 字符串开头
  • ([^:\s]++) - 第 1 组:除 : 和空格之外的一个或多个字符(所有格量词可防止回溯到 [^:\s] 模式,因此如果存在冒号则可防止部分匹配进一步在字符串中)
  • (?!:) - 后面没有紧跟冒号。

您也可以省略组,然后使用 ^[^:\s]++(?!:) 并替换为 Line:[=18=]。参见 this regex demo

你试过的模式^(?![^:]+:)的意思是:断言当前位置右边除:外没有1个或多个字符,然后匹配:

您无法正确替换 1 : A 等字符串,因为取反字符 class [^:] 也匹配空白字符。

您也可以排除匹配的空白字符:

^(?![^:\s]+:)

regex101 demo 查看替换。