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

时间:2018-08-30 13:34:22

标签: .net regex

我正在尝试在紧接特定单词之后的单词中的大写字母之前添加一个空格。

之前:

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

之后:

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

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

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

1 个答案:

答案 0 :(得分:2)

您可以使用支持可变长度模式的.NET幕后花线:

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

用空格和$&(整个匹配值的后向引用)替换。

请参见regex demo

详细信息

  • (?<=\[XpTo\("(?:[A-Z]+[a-z]+)+)-向后的正向查找,要求其模式立即与当前位置的左侧匹配:
    • \[XpTo\("-文字[XpTo("文字
    • (?:[A-Z]+[a-z]+)+-的一个或多个序列
    • [A-Z]+[a-z]+-一个或多个大写ASCII字母,后跟一个或多个小写ASCII字母
  • [A-Z]+-一个或多个大写ASCII字母
  • [a-z]+-一个或多个小写ASCII字母