Python在两个字符之间替换一个字符并保持休息

时间:2019-09-07 23:47:01

标签: regex python-3.x

我正在尝试替换两个已知字符(§)之间的逗号

我的测试字符串:'§Bandra(West),Mumbai§'

预期输出:'§Bandra(West);Mumbai§'

我尝试过:

re.sub(r'\§[^\,]+\,[^\,]+\§',r'\§[^\,]+\;[^\,]+\§', '§Bandra(West),Mumbai§') 

但这只是将我的正则表达式返回为字符串:\§[^\',']+\;[^\',']+\§

我在这里做错了什么?

2 个答案:

答案 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中观看它的匹配方式   针对一些样本输入。