Skip to main content
 首页 » 编程设计

python之如何在 Python 中使用 Regex 搜索文档中的所有字母数字序列

2025年05月04日13yxwkf

我在 Regex 中遇到了一个问题,我需要在文档中搜索所有可用的字母数字序列。一个文档可以有多个这样的序列。我正在用 Python 来做。

例如,如果文档是“一些 blah blah blah,id X12354、id 1234Z 和 id 12P555。都是 50 岁。”

所以预期的输出应该是:

X12354

1234Z

12P555

总结:字母和数字都必须出现在字符串中,其中顺序或长度无关紧要。该字符串可以在文档中出现多次。它可以在任何地方。

我尝试了几种方法来整理正则表达式,但每次都变得令人困惑。提前致谢。

请您参考如下方法:

您可以在单词边界之间进行匹配,并使用正向前瞻来断言大写字符和数字:

\b(?=[A-Z-0-9]*[A-Z])(?=[A-Z-0-9]*[0-9])[A-Z0-9]+\b

那将匹配:

  • \b 字边界
  • (?= 断言右边是什么的正面前瞻
    • [A-Z0-9]* 匹配零次或多次大写字符
    • [A-Z] 匹配一个大写字符
  • ) 关闭正面前瞻
  • (?= 断言右边是什么的正面前瞻
    • [A-Z0-9]* 匹配零次或多次大写字符
    • [0-9] 匹配一个数字
  • ) 关闭正面前瞻
  • [A-Z0-9]+ 匹配一个或多个大写字符或数字
  • \b 字边界

因此,在 Python 中,这将是:

import re 
s = "some blah blah blah with id X12354, id 1234Z and id 12P555. All are 50 years old." 
re.findall(r'\b(?=[A-Z-0-9]*[A-Z])(?=[A-Z-0-9]*[0-9])[A-Z0-9]+\b', s) 

给予:

['X12354', '1234Z', '12P555']