我有一个XML文件,需要查找和替换包含在两对标记之间的特定模式的所有出现,而不是混合在它们之间。
示例
a) <CnlNum>548</CnlNum>
b) GetBit(Val(548), 3)548是我需要查找并更改为1548的示例文本。(实际上,在500到999之间的任何3位数字都必须由number+1000替换)。
我使用了以下方法:
搜索准则
(<CnlNum>|Val\s?\()([5-9])(\d{2})(</CnlNum>|\),\s?)替换正则表达式
($1)1$2$3$4问题是,这个搜索正则表达式虽然是工作的,但不仅匹配相应的起始字符串/结束字符串,而且还会发现以下内容,这是错误的:
<CnlNum>548),我想知道如何连接regex中的起始/结尾文本?
我认为这将有助于链接匹配的XML或HTML标记(.)。
发布于 2021-08-17 08:50:45
您可以捕获第一个组中的替代方案,然后使用一个条件结构:
((<CnlNum>)|(Val\s?\())([5-9])(\d{2})((?(2)</CnlNum>|\),\s?))
^ ^ ^ ^ ^^^^^ ^ ^见regex演示。详细信息
((<CnlNum>)|(Val\s?\()) -第1组:<CnlNum> (第2组)或Val +可选空格和(字符(第3组)([5-9]) -第4组:从5到9的数字(\d{2}) -第5组:任意两位数((?(2)</CnlNum>|\),\s?)) -第6组:如果第2组匹配,则匹配</CnlNum> else,匹配)、逗号和可选空格。https://stackoverflow.com/questions/68811918
复制相似问题