我试图替换两个已知字符之间的逗号( § )
§
我的测试字符串: '§Bandra(West),Mumbai§'
'§Bandra(West),Mumbai§'
预期产出: '§Bandra(West);Mumbai§'
'§Bandra(West);Mumbai§'
re.sub(r'\§[^\,]+\,[^\,]+\§',r'\§[^\,]+\;[^\,]+\§', '§Bandra(West),Mumbai§')
但那只是将正则表达式返回为字符串: \§[^\',']+\;[^\',']+\§
\§[^\',']+\;[^\',']+\§
我在这里做错什么了?
你想要正则表达式 组 ,用括号创建,然后用反斜杠和数字引用:
>>> re.sub(r'(§[^,]+),([^,]+§)', r'\1;\2', '§Bandra(West),Mumbai§') '§Bandra(West);Mumbai§'
在这里 (§[^,]+) 对应于 \1 和 ([^,]+§) 对应于 \2 .
(§[^,]+)
\1
([^,]+§)
\2
更多信息: re - Python documentation 在下面 (...) 和 \number
re
(...)
\number
顺便说一句:
在这个特定的示例中,可以使用更简单的模式:
>>> re.sub(r'(§.*),(.*§)', r'\1;\2', '§Bandra(West),Mumbai§') '§Bandra(West);Mumbai§'
甚至一个简单的 .replace :
.replace
>>> '§Bandra(West),Mumbai§'.replace(',', ';') '§Bandra(West);Mumbai§'
这个表情,
(§[^§\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 ,如何匹配 对照一些样本输入。