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

Python Regex仅当后跟数字时才有条件地替换值,python,regex,Python,Regex,我正在创建一个正则表达式,它查找左括号“(”并将其替换为减号“-”),但前提是括号后面跟一个数字。我该如何做 我想出了这个密码,但它并没有保留数字: string1 = '(words) and (9878 )' print(re.sub(r"\([+-]?\d+(?:\.\d+)?", '-', string1)) 结果如下: '(words) and - )' 但是我想要这个: '(words) and -9878 )' 我需要在此处更改什么,以便将“(”替换为“

我正在创建一个正则表达式,它查找左括号“(”并将其替换为减号“-”),但前提是括号后面跟一个数字。我该如何做

我想出了这个密码,但它并没有保留数字:

string1 = '(words) and (9878 )'

print(re.sub(r"\([+-]?\d+(?:\.\d+)?", '-', string1))
结果如下:

'(words) and - )'
但是我想要这个:

'(words) and -9878 )'
我需要在此处更改什么,以便将“(”替换为“-”,但不删除以下数字?

您可以在正则表达式中使用带有简化模式的:

重新导入
string1='(单词)和(9878)'
打印(re.sub(r“\(?=[+-]?\d)”,'-',string1))
#=>(字)和-9878)
请参阅和

带有以下内容的变体:

re.sub(r“\([+-]?\d)”,r'-\1',string1)
详情:

  • \(
    -a
    字符
  • (?=[+-]?\d)
    -一种与位置匹配的正向前瞻,该位置后面紧跟一个可选的
    +
    -
    ,然后是任意数字
在这种情况下,无需检查前瞻模式中是否有多个数字,或者如果该数字后面有可选的
(?:\。\d+)
模式,则只有强制前缀在这种正向前瞻中才有意义。

您可以在正则表达式中使用带有简化模式的前缀:

重新导入
string1='(单词)和(9878)'
打印(re.sub(r“\(?=[+-]?\d)”,'-',string1))
#=>(字)和-9878)
请参阅和

带有以下内容的变体:

re.sub(r“\([+-]?\d)”,r'-\1',string1)
详情:

  • \(
    -a
    字符
  • (?=[+-]?\d)
    -一种与位置匹配的正向前瞻,该位置后面紧跟一个可选的
    +
    -
    ,然后是任意数字

在这种情况下,无需检查前瞻模式中是否有多个数字,或者如果该数字后面有可选的
(?:\。\d+)
模式,则只有强制前缀在这种正向前瞻中才有意义。

前瞻:
r“\(?=[+-]?\d)”
在正则表达式中就可以了。效果非常好。所以在这种情况下,“=”是前瞻吗?是的,我在下面的答案中解释过。在正则表达式中,
r“\((?=[+-]?\d)”
就可以了。效果非常好。所以在这种情况下,“=”是前瞻吗?是的,我在下面的答案中解释过。