用其他字符串替换字符串而不是子字符串

时间:2016-12-07 07:21:35

标签: python regex python-2.7 python-3.x substring

BCXADServer() : Server(), m_bBet(false) {}

我想将Server()替换为它所在的位置,而不是像其他任何地方一样将它替换为BCXADServer()

所以期望的输出是 -

BCXADServer() : <some-string>, m_bBet(false) {}

但我正在

BCXAD<some-string> : <some-string>, m_bBet(false) {}

它正在两个地方取代。

像这样,它位于文件的多个位置。

我确实尝试过re.sub和replace()方法但它总是替换所有地方而不是所需的地方。

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

使用regex\b匹配工作边界,因此如果它在其他单词的子字符串中

,它将与该单词不匹配
import re
s = 'BCXADServer() : Server(), m_bBet(false) {}'
re.sub(r'\bServer\(\)', 'XXX', s)  # replace Server() with XXX
# 'BCXADServer() : XXX, m_bBet(false) {}'

答案 1 :(得分:1)

您可以使用不同的方式将所需的字符串替换为所需的字符串。

例如:

使用正则表达式:

import re
my_input_string = "BCXADServer() : Server(), m_bBet(false) {}"
pattern = r'\bServer\(\)'
to_replace = "<some-string>"
replaced_string = re.sub(pattern, to_replace, my_input_string)
print(replaced_string)

输出:

BCXADServer() : <some-string>, m_bBet(false) {}

分割字符串并使用replace()

my_input_string = "BCXADServer() : Server(), m_bBet(false) {}"

def replace_string(input_string = "", replace_string = ""):
    b = list(input_string.split(":"))
    return ":".join([b[0], b[1].replace("Server()", replace_string)])

replaced_string = replace_string(my_input_string, "<some-string>")
print(replaced_string)

输出:

BCXADServer() : <some-string>, m_bBet(false) {}