如何用相同的替换替换不同的图案?

How to replace different patterns with the same replacement?

我正在尝试使用正则表达式替换多个项目,但没有得到预期的输出。 在下面的代码中,我需要将 phone 数字和单词 'hi' 替换为 "X"

txt = "Hi, my phone number is 089992654231. I am 24 years old."

def processString3(txt):
    txt = re.sub('[0-9],Hi]', 'X', txt)
    print(txt)

processString3(txt)

预期输出 - XX, my phone number is XXXXXXXXXX. I am 24 years old.

您可能会发现以下内容可以接受:

txt = "Hi, my phone number is 089992654231. I am 24 years old."

def processString3(txt):
    txt = re.sub('[0-9]{5,}|Hi', lambda m: re.sub(r'.', 'X', m.group()), txt)
    print(txt)

processString3(txt)
# XX, my phone number is XXXXXXXXXXXX. I am 24 years old.

以上逻辑将目标 phone 号码定义为连续 5 位或更多位数字。这将排除年龄,年龄不应超过 3 位数。

您的正则表达式格式错误,请尝试:

import re

def processString3(txt):
    phone_number = re.search(r'(\d{5,})', txt)
    greetings = re.search(r'(Hi)', txt)
    if phone_number:
        number_str = phone_number.group(1)
        txt = txt.replace(number_str, 'X' * len(number_str))
    if greetings:
        greeting_str = greetings.group(1)
        txt = txt.replace(greeting_str, 'X' * len(greeting_str))
    print(txt)


if __name__ == '__main__':
    txt = "Hi, my phone number is 089992654231. I am 24 years old."
    processString3(txt)

这是一个临时解决方案,因为您没有准确指定要隐藏的字词。如果您提供更多详细信息,我可以 return 提供更有效的答案。