【问题标题】:Match everything other than a specific pattern in a number匹配数字中除特定模式以外的所有内容
【发布时间】:2021-12-30 11:11:07
【问题描述】:

我正在尝试匹配电话号码中的所有内容,而不是特定模式。

在数字“07440359359”中有没有办法匹配除“359”以外的所有内容?

我的主要目的是能够替换不在模式中的数字的最后一位。

例如:

对于07440359359,所需的输出是0744*359359

到目前为止,我已经提出了这个模式^(?!.*(359)),但它不匹配模式以外的所有内容。

任何想法将不胜感激! :)

【问题讨论】:

  • 你能再举几个例子以及他们的预期输出吗?

标签: python regex


【解决方案1】:

我想你会想要的:

\d((?:359)*)$

在线查看demo


  • \d - 一位数;
  • ((?:359)*) - 第一个匹配“359”的捕获组(贪婪);
  • $ - 结束字符串锚。

替换为*\1


import re
s = "07440359359"
print(re.sub(r'\d((?:359)*)$', r'*\1', s))

打印:

0744*359359

【讨论】:

    【解决方案2】:

    为什么不使用正则表达式来捕获组和后视?

    s = "07440359359"
    
    import re
    
    out = re.sub(r'(\d+?)((?:359)+)', r'\1*\2', s)
    

    输出:'07440*359359'

    如果要确保359 是最后一位:

    s = "074403593594"
    
    import re
    
    re.sub(r'(\d+?)((?:359)+)(?!\d)', r'\1*\2', s)
    

    输出:074403593594

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-26
      • 2010-12-13
      相关资源
      最近更新 更多