首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RegExp如何链接匹配的开始/结束字符串进行搜索/替换?

RegExp如何链接匹配的开始/结束字符串进行搜索/替换?
EN

Stack Overflow用户
提问于 2021-08-17 05:01:00
回答 1查看 38关注 0票数 1

我有一个XML文件,需要查找和替换包含在两对标记之间的特定模式的所有出现,而不是混合在它们之间。

示例

代码语言:javascript
复制
 a) <CnlNum>548</CnlNum>
 b) GetBit(Val(548), 3)

548是我需要查找并更改为1548的示例文本。(实际上,在500到999之间的任何3位数字都必须由number+1000替换)。

我使用了以下方法:

搜索准则

代码语言:javascript
复制
(<CnlNum>|Val\s?\()([5-9])(\d{2})(</CnlNum>|\),\s?)

替换正则表达式

代码语言:javascript
复制
($1)1$2$3$4

问题是,这个搜索正则表达式虽然是工作的,但不仅匹配相应的起始字符串/结束字符串,而且还会发现以下内容,这是错误的:

代码语言:javascript
复制
<CnlNum>548),

我想知道如何连接regex中的起始/结尾文本?

我认为这将有助于链接匹配的XML或HTML标记(.)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-17 08:50:45

您可以捕获第一个组中的替代方案,然后使用一个条件结构:

代码语言:javascript
复制
((<CnlNum>)|(Val\s?\())([5-9])(\d{2})((?(2)</CnlNum>|\),\s?))
 ^        ^ ^        ^                ^^^^^         ^      ^

regex演示。详细信息

  • ((<CnlNum>)|(Val\s?\()) -第1组:<CnlNum> (第2组)或Val +可选空格和(字符(第3组)
  • ([5-9]) -第4组:从59的数字
  • (\d{2}) -第5组:任意两位数
  • ((?(2)</CnlNum>|\),\s?)) -第6组:如果第2组匹配,则匹配</CnlNum> else,匹配)、逗号和可选空格。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68811918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档