我想写一个正则表达式来替换匹配的字符串问题。
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).
没有任何反应。
如何使线路正常工作?
答案 0 :(得分:3)
A
包含正则表达式引擎解释为元字符的括号(在本例中为捕获组)。由于你希望它们在字面上匹配,你需要转义它们。这将涉及在每个这样的角色之前附加一个反斜杠。
re
提供了一个很好的小便利功能,re.escape
,可以帮到你。
以下是您需要传递的修改后的正则表达式:
r'{}\s\(100%\);\s'.format(re.escape(A))