.net - 正则表达式 C# - 组匹配不迭代
问题描述
我正在尝试在出现在特定单词之后的单词中的大写字母之前添加一个空格。
前:
[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 lookbehind:
(?<=\[XpTo\("(?:[A-Z]+[a-z]+)+)[A-Z]+[a-z]+
替换为空格和$&
,对整个匹配值的反向引用。
查看正则表达式演示
细节
(?<=\[XpTo\("(?:[A-Z]+[a-z]+)+)
- 一个积极的向后看,要求其模式立即匹配到当前位置的左侧:\[XpTo\("
- 文字[XpTo("
文本(?:[A-Z]+[a-z]+)+
- 一个或多个序列[A-Z]+[a-z]+
- 一个或多个大写 ASCII 字母后跟一个或多个小写 ASCII 字母
[A-Z]+
- 一个或多个大写 ASCII 字母[a-z]+
- 一个或多个小写 ASCII 字母
推荐阅读
- python - 熊猫数据框中的行之间有交集的数据框?
- formatting - 黄瓜包裹长场景名称
- c++ - 如何在不使用 C++ 标准库的情况下以特定格式打印相邻列表?
- r - 当参数可以从一组可能的选择中取一个值时,如何确定 R 函数的默认值?所以要重新创建一个函数调用
- video - 如何在我们的旧系统中使用 MPEG-DASH
- javascript - E11000 重复键错误收集:db.products 索引:product_id_1 重复键:{ product_id:null }
- image - 从 Docker Hub 拉取 Docker 映像时出现问题
- python - 如何根据分布中的峰值数量创建要优化的扩展函数?
- python - 按百分比将文本文件拆分为多个文件以进行测试和训练
- python - 验证检查签名的方法在 Python 3.9 中不起作用