Python 如何用字符串中的另一个正则表达式替换正则表达式

Python 如何用字符串中的另一个正则表达式替换正则表达式,python,regex,Python,Regex,这展示了如何用另一个类似这样的正则表达式替换一个正则表达式 $string = '"SIP/1037-00000014","SIP/CL-00000015","Dial","SIP/CL/61436523277,45"'; $$pattern = '["SIP/CL/(\d*),(\d*)",]'; $replacement = '"SIP/CL/\1|\2",'; $string = preg_replace($pattern, $replacement, $string); print($s

这展示了如何用另一个类似这样的正则表达式替换一个正则表达式

$string = '"SIP/1037-00000014","SIP/CL-00000015","Dial","SIP/CL/61436523277,45"';
$$pattern = '["SIP/CL/(\d*),(\d*)",]';
$replacement = '"SIP/CL/\1|\2",';
$string = preg_replace($pattern, $replacement, $string);
print($string);
但是,我无法调整这种模式来解决我想删除两个单词之间的句号,而不是一个单词和一个数字之间的句号的情况:

text = 'this . is bad. Not . 820'
regex1 = r'(\w+)(\s\.\s)(\D+)'
regex2 = r'(\w+)(\s)(\D+)'
re.sub(regex1, regex2, text)

# Desired outcome:
'this is bad. Not . 820'

基本上,我喜欢删除两个字母表单词之间的
。有人能帮我解决这个问题吗?提前谢谢。

这些表达可能与您的想法非常接近:

\s[.](?=\s\D)

输出
如果您希望探索/简化/修改该表达式,它已被删除 在的右上面板上进行了说明 . 如果你愿意,你可以 也可以观看,它将如何匹配 对照一些样本输入



首先,由于显而易见的原因,您不能真正采用PHP并将其直接应用于Python

其次,它总是有助于指定API更改时使用的Python版本。幸运的是,在本例中,
re.sub
的API在Python2.x和Python3之间保持不变

关于你的问题

re.sub
的第二个参数是字符串或函数。如果传入
regex2
,它只会将
regex1
替换为
regex2
的字符串内容,它不会将
regex2
作为regex应用


如果要使用从第一个正则表达式派生的组(类似于您的示例,使用\1和\2从第一个正则表达式中提取第一个和第二个匹配组),则需要使用,它将a作为其唯一参数,然后,您可以使用它提取匹配的组,并将它们作为替换字符串的一部分返回。

谢谢,利亚姆。我不知道我所依赖的示例代码是PHP。我知道
re.sub
的第二个参数必须是string或callable。但是示例代码(我认为是Python)表明它可以完成,因此我提出了问题。谢谢,Emma。您的解决方案几乎是完美的。然而,我希望得到这样的结果
这很糟糕。不820
其中,句号保持在Not和820之间
(?<=\s)[.](?=\s\D)
import re

regex = r"\s[.](?=\s\D)"
test_str = "this . is bad. Not . 820"
print(re.sub(regex, "", test_str))
this is bad. Not . 820