我在 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']
