【问题标题】:Regex program to print words from sentences which contain 2 numbers and they are not next to each other正则表达式程序从包含 2 个数字且它们不相邻的句子中打印单词
【发布时间】:2020-09-17 17:03:07
【问题描述】:

正则表达式程序从包含 2 个数字且它们不相邻的句子中打印单词。我制作了一个打印它们的正则表达式程序,但在某些情况下,它们会打印出带有数字的单词。

import re
tekst = str(input("Unesi tekst: "))
pattern = re.findall(r'\b(?=\d*[^\W\d])[^\W\d]*\d[^\W\d]*\d\w*\b',tekst)
print(pattern)

输入:

2test2
te22st
2tes2t
t2est2

输出:

2test2
2tes2t
t2est2

【问题讨论】:

    标签: python regex


    【解决方案1】:

    使用re.findall:

    [i for i in tekst.split() if len(re.findall("\d+", i)) == 2]
    

    输出:

    ['2test2', '2tes2t', 't2est2']
    

    【讨论】:

      【解决方案2】:

      您可以更新模式以重复中间否定字符类 1 次以上,以防止 2 个数字彼此相邻。

      \b(?=\d*[^\W\d])[^\W\d]*\d[^\W\d]+\d[^\W\d]*\b
      

      说明

      • \b字边界
      • (?=\d*[^\W\d]) 断言为至少一个不是数字的单词 char
      • [^\W\d]* 匹配一个单词 0+ 次没有数字的字符
      • \d匹配第一个数字
      • [^\W\d]1 匹配 1+ 次没有数字的单词 char 以防止它们彼此相邻
      • \d匹配第二个数字
      • [^\W\d]* 匹配一个单词 0+ 次没有数字的字符
      • \b字边界

      Regex demo

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多