【问题标题】:How to replace different patterns with the same replacement?如何用相同的替换替换不同的模式?
【发布时间】:2022-01-08 18:28:37
【问题描述】:

我正在尝试使用正则表达式替换多个项目,但没有得到预期的输出。 在下面的代码中,我需要用 "X"

替换电话号码和单词“hi”
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.

【问题讨论】:

    标签: python regex re


    【解决方案1】:

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

    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.
    

    上述逻辑将目标电话号码定义为连续任意 5 位或更多位。这将排除年龄,年龄不得超过 3 位数。

    【讨论】:

      【解决方案2】:

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

      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)
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-18
        • 2019-09-03
        相关资源
        最近更新 更多