繁体   English   中英

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

[英]How to search all the alphanumeric sequences in a document using Regex in Python?

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

因此,例如,如果该文档是“ ID为X12354,ID为1234Z和ID 12P555的某些东西等等,都已经50岁了”。

因此,预期输出应为:

X12354

1234Z

12P555

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

我尝试了几种方法来解决正则表达式,但每次都变得混乱。 提前致谢。

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

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

那将匹配:

  • \\b字边界
  • (?=肯定右边的正向前进
    • [A-Z0-9] *匹配零个或多个大写字符
    • [AZ]匹配大写字符
  • )正面正向
  • (?=肯定右边的正向前进
    • [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']

这将检测在每个小的字符串中是否至少存在字母和数字。

import re
from string import punctuation
s = "some blah blah blah with id X12354, id 1234Z and id 12P555. All are 50 years old."
ans = [v for v in re.split("[ " + punctuation + "]", s) 
       if any(c.isdigit() for c in v) and any(c.isalpha() for c in v)]
['X12354,', '1234Z', '12P555']

re.split("[ " + punctuation + "]", s)拆分所有标点符号和空格。

使用re.findall获取所有匹配项。 使用两次先行,一次用于验证匹配项是否包含数字,另一次用于验证其是否包含字母。

document = "some blah blah blah with id X12354, id 1234Z and id 12P555. All are 50 years old."
matches = re.findall('(?=[a-z0-9]*[a-z])(?=[a-z0-9]*[0-9])[a-z0-9]+', document, re.IGNORECASE)
print(matches)

您可以在此处在线尝试正则表达式。

暂无
暂无

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

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