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

2024-09-29 23:21:49 发布

您现在位置:Python中文网/ 问答频道 /正文

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

例如,如果这个文档像“some blah blah blah,id为X12354,id为1234Z,id为12P555。都50岁了。”

因此,预期输出应为:

X12354型

1234Z型

第12P555页

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

我试过几种方法来整理正则表达式,但每次都会让人困惑。提前谢谢。你知道吗


Tags: 方法字符串文档id地方字母序列数字
3条回答

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

^{}

符合以下条件:

  • \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']

它检测每个小字符串块中是否至少存在一个字母和数字。你知道吗

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获取所有匹配项。使用两个lookahead,一个用于验证匹配是否包含数字,另一个用于验证匹配是否包含字母。你知道吗

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)

你可以在线试用regex here。你知道吗

相关问题 更多 >

    热门问题