我正在尝试替换两个已知字符(§
)之间的逗号
我的测试字符串:'§Bandra(West),Mumbai§'
预期输出:'§Bandra(West);Mumbai§'
我尝试过:
re.sub(r'\§[^\,]+\,[^\,]+\§',r'\§[^\,]+\;[^\,]+\§', '§Bandra(West),Mumbai§')
但这只是将我的正则表达式返回为字符串:\§[^\',']+\;[^\',']+\§
我在这里做错了什么?
答案 0 :(得分:2)
您要使用正则表达式 group ,该正则表达式使用括号创建,然后用反斜杠和数字引用:
>>> re.sub(r'(§[^,]+),([^,]+§)', r'\1;\2', '§Bandra(West),Mumbai§')
'§Bandra(West);Mumbai§'
此处(§[^,]+)
对应于\1
,([^,]+§)
对应于\2
。
更多信息:(...)
和\number
下的re
- Python documentation
顺便说一句:
在此特定示例中,您可以使用更简单的模式:
>>> re.sub(r'(§.*),(.*§)', r'\1;\2', '§Bandra(West),Mumbai§')
'§Bandra(West);Mumbai§'
甚至是简单的.replace
:
>>> '§Bandra(West),Mumbai§'.replace(',', ';')
'§Bandra(West);Mumbai§'
答案 1 :(得分:2)
此表达式
(§[^§\r\n]*),([^§\r\n]*§)
并替换为
\1;\2
可能只是在这里工作。
import re
string = """
§Bandra(West);Mumbai§
§Bandra(West),Mumbai§
§,§
Bandra(West),Mumbai§
"""
print(re.sub(r'(§[^§\r\n]*),([^§\r\n]*§)', r"\1;\2", string))
§Bandra(West);Mumbai§
§Bandra(West);Mumbai§
§;§
Bandra(West),Mumbai§
如果您想探索/简化/修改表达式,可以 在右上角的面板上进行了说明 regex101.com。如果您愿意, 也可以在this link中观看它的匹配方式 针对一些样本输入。