正则表达式C# - 组匹配不迭代

问题描述 投票:1回答:1

我正在尝试在大写字母之前添加一个空格,该单词出现在特定单词之后。

之前:

[XpTo("GetTheStuff", "XXX")]

后:

[XpTo("Get The Stuff", "XXX")]

这是我最好的尝试: 表达:(\[XpTo\(")([A-Z]{1}[a-z]+)+ 替换:$1 $2 结果:[XpTo(" Stuff", "XXX")]

我不明白为什么第二组([A-Z]{1}[a-z]+)不“迭代”并且只返回最后一次出现。

.net regex
1个回答
2
投票

您可以使用支持可变长度模式的.NET lookbehind:

(?<=\[XpTo\("(?:[A-Z]+[a-z]+)+)[A-Z]+[a-z]+

替换为空格和$&,对整个匹配值的反向引用。

regex demo

细节

  • (?<=\[XpTo\("(?:[A-Z]+[a-z]+)+) - 一个积极的lookbehind,需要它的模式立即匹配当前位置的左侧: \[XpTo\(" - 文字[XpTo("文本 (?:[A-Z]+[a-z]+)+ - 一个或多个序列 [A-Z]+[a-z]+ - 一个或多个大写ASCII字母,后跟一个或多个小写ASCII字母
  • [A-Z]+ - 一个或多个大写ASCII字母
  • [a-z]+ - 一个或多个小写ASCII字母
© www.soinside.com 2019 - 2024. All rights reserved.