繁体   English   中英

正则表达式程序从包含 2 个数字且它们不相邻的句子中打印单词

[英]Regex program to print words from sentences which contain 2 numbers and they are not next to each other

正则表达式程序从包含 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

使用re.findall

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

输出:

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

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

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

解释

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

正则表达式演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM