我正在创建一个正则表达式,它查找左括号"("并将其替换为一个负号"-",但前提是括号后面跟着一个数字。我该怎么做呢?
我想出了这段代码,但它没有留下完整的数字:
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+)?
模式,只有强制性的前缀在这个正向前瞻性中有意义。