Regex仅当后面跟着数字时才有条件地替换值



我正在创建一个正则表达式,它查找左括号"("并将其替换为一个负号"-",但前提是括号后面跟着一个数字。我该怎么做呢?

我想出了这段代码,但它没有留下完整的数字:

string1 = '(words) and (9878 )'
print(re.sub(r"([+-]?d+(?:.d+)?", '-', string1))

给出的结果是:

'(words) and - )'

但是我想要这个:

'(words) and -9878 )'

我需要在这里做什么更改,以便我将'('替换为'-',但不消除下面的数字?

您可以在正则表达式本身中使用简化模式的forward:

import re
string1 = '(words) and (9878 )'
print(re.sub(r"((?=[+-]?d)", '-', string1))
# => (words) and -9878 )

参见Python演示和正则表达式演示。

带有捕获组的变体:

re.sub(r"(([+-]?d)", r'-1', string1)

细节:

  • (- a(char
  • (?=[+-]?d)-匹配一个位置,紧接着是一个可选的+-,然后是任何数字。

在这种情况下,不需要检查前瞻性模式中是否有一个以上的数字,或者该数字后面是否有一个可选的(?:.d+)?模式,只有强制性的前缀在这个正向前瞻性中有意义。

最新更新