Python,Regex替换字符串包含“/”,“(”和“)”

时间:2017-11-14 06:08:27

标签: python regex

我想写一个正则表达式来替换匹配的字符串问题。

A是短字符串,B是长字符串,包含A.

A = "5456-module - PAN-12"
B = "5456-module - PAN-12 (100%); 2883-controller - CHG-24; 2898-battery - BAT-12-100 (12 V/100); 2917-panel - MKT-200 (4 x PAN-12-50)"

我想删除B中的A部分,只要它包含A“(100%)”。

这条线运作良好。

Print re.sub(A + r'\s[()]100%[()];\s', "", B)

它返回:

2883-controller - CHG-24; 2898-battery - BAT-12-100 (12 V/100); 2917-panel - MKT-200 (4 x PAN-12-50)

但是,当A字符串包含“/”和“(”,“)”时。它不起作用。像:

new_A = "5456-module - PAN-12 V/50 Wp (1/2 Inch)"
new_B = "5456-module - PAN-12 V/50 Wp (1/2 Inch) (100%); 2883-controller - CHG-24; 2898-battery - BAT-12-100 (12 V/100); 2917-panel - MKT-200 (4 x PAN-12-50)"

当我运行同一行时:

Print re.sub(new_A + r'\s[()]100%[()];\s', "", new_B). 
没有任何反应。

如何使线路正常工作?

1 个答案:

答案 0 :(得分:3)

第二个示例中的

A包含正则表达式引擎解释为元字符的括号(在本例中为捕获组)。由于你希望它们在字面上匹配,你需要转义它们。这将涉及在每个这样的角色之前附加一个反斜杠。

然而,

re提供了一个很好的小便利功能,re.escape,可以帮到你。

以下是您需要传递的修改后的正则表达式:

r'{}\s\(100%\);\s'.format(re.escape(A))