【问题标题】:How to find specific pattern in a paragraph in Python?如何在 Python 中的段落中查找特定模式?
【发布时间】:2022-01-04 18:39:00
【问题描述】:

我想在段落中找到特定的模式。模式必须包含a-zA-Z0-9,长度为5或大于5。如何在Python上实现?

我的代码是:

str = "I love5 verye mu765ch"
print(re.findall('(?=.*[0-9])(?=.*[a-zA-Z]{5,})',str))

这将返回一个空值。

预期结果如下:

love5
mu765ch

有效的模式是这样的:

9aacbe
aver23893dk
asdf897

【问题讨论】:

  • 欢迎来到 Stack Overflow!您似乎在要求某人为您编写一些代码。 Stack Overflow 是一个问答网站,而不是代码编写服务。请see here学习如何写出有效的问题
  • 你用谷歌搜索过吗?试试看?
  • [a-zA-Z0-9]{5,} ?
  • 谢谢@OlvinR​​oght,但我需要正则表达式和操作。请看我的代码
  • 段落是什么意思?问题是它应该包含 a-zA-Z 和 0-9,但它是否也可以包含其他字符,然后总共 5 个或更多?也许像(?<!\S)(?=[^\d\s]*\d)(?=[^\sa-zA-Z]*[a-zA-Z])\S{5,}regex101.com/r/O6556L/1

标签: python regex


【解决方案1】:

这很容易通过一些编程逻辑和一个简单的正则表达式来完成:

import re

string = "I love5 verye mu765ch a123...bbb"

pattern = re.compile(r'(?=\D*\d)(?=[^a-zA-Z]*[a-zA-Z]).{5,}')

interesting = [word for word in string.split() if pattern.match(word)]
print(interesting)

这会产生

['love5', 'mu765ch', 'a123...bbb']

a demo on ideone.com

【讨论】:

  • 动作太多,如果我们使用正则表达式,那么让正则表达式完成所有工作。 \b(?=[A-Za-z\d]*?\d)(?=[A-Za-z\d]*?[A-Za-z])((?:[A-Za-z\d]){5,})\b 应该与 re.findall() 一起使用。
  • @OlvinR​​oght:本身没有太多动作。这里是正则表达式的忠实拥护者(请参阅金色正则表达式徽章),但请注意整个代码必须保持可读性 - 这更有可能是更短的模式和理解。
  • @OlvinR​​oght 请注意,您不需要所有那些捕获/非捕获组,您可以省略非贪婪量词\b(?=[A-Za-z]*\d)(?=\d*[A-Za-z])[A-Za-z\d]{5,}\b
  • @Thefourthbird,是的,你是对的,实际上并没有优化它,写的第一个版本出现在我的脑海中。不过感谢您的优化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多