使用正则表达式在Python中替换整数值

2 投票
1 回答
895 浏览
提问于 2025-04-16 11:55

好吧,

我正在尝试在 XML 文件上应用一些正则表达式(搜索/替换)。是的,我需要使用一些库,但在这种情况下我不能。我的问题是,正如你可能猜到的那样,我想用一个整数替换节点的值。当我尝试这样做时,它给我报了分组错误。以下是我的模式:

搜索模式:

(<fieldset>)([^>].+)(<ipadd>)([^>].+)(<value>)([^>].+)(</value>)([^>].+)(</ipadd>)([^>].+)(</fieldset>)

替换模式:

\1\2\3\4\5123.123.123.123\7\8\9\10\11

如你所见,替换模式中的第五组变成了 "\5123"。当然,这样是行不通的。

如果我使用这样的方式:

\1\2\3\4\5 123.123.123.123\7\8\9\10\11

那就可以了。但我不想在这里加个空格或其他东西。

而且它在处理字符串时也可以工作:

\1\2\3\4\5foofoofoo\7\8\9\10\11

啊,我正在使用 re.sub() 来进行替换。

有没有办法让我在不加空格的情况下使用它呢?

谢谢大家

1 个回答

2

来自 Python 正则表达式操作 - re.sub(pattern, repl, string[, count, flags])

除了上面提到的字符转义和反向引用之外,\g<name> 可以用来匹配一个叫做 name 的组所匹配的子字符串,这个组是通过 (?P<name>...) 这种语法定义的。\g<number> 则是用对应的组号;比如 \g<2> 就等于 \2,但在替换时不会产生歧义,比如 \g<2>0。这里的 \20 会被理解为引用第20组,而不是引用第2组后面跟着字符 '0'。反向引用 \g<0> 会替换为正则表达式匹配到的整个子字符串。

撰写回答