【发布时间】:2021-07-26 13:52:29
【问题描述】:
我正在尝试从文本中提取具有长度大于 8 的数字/字母数字字符的标记/部分标记。
例子:
text = 'https://stackoverflow.com/questions/59800512/ 510557XXXXXX2302 Normal words 1601371803 NhLw6NlR0EksRWkLddEo7NiEvrg https://www.google.com/search?q=some+google+search&oq=some+google+search&aqs=chrome..69i57j0i22i30l8j0i390.4672j0j7&sourceid=chrome&ie=UTF-8'
预期的输出是:
59800512 510557XXXXXX2302 1601371803 NhLw6NlR0EksRWkLddEo7NiEvrg 69i57j0i22i30l8j0i390 4672j0j7
我已经尝试使用正则表达式:((\d+)|([A-Za-z]+\d)[\dA-Za-z]*),基于答案Python Alphanumeric Regex。我得到了以下结果:
[match for match in re.findall(r"((\d+)|([A-Za-z]+\d)[\dA-Za-z]*)",text)]
Output :
[('59800512', '59800512', ''),
('510557', '510557', ''),
('XXXXXX2302', '', 'XXXXXX2'),
('1601371803', '1601371803', ''),
('NhLw6NlR0EksRWkLddEo7NiEvrg', '', 'NhLw6'),
('69', '69', ''),
('i57j0i22i30l8j0i390', '', 'i5'),
('4672', '4672', ''),
('j0j7', '', 'j0'),
('8', '8', '')]
我正在为每个匹配的令牌获取一个匹配组的元组。
可以再次过滤这些元组。但我正在努力使代码尽可能高效和 Pythonic。
有人可以提出解决方案吗?它不需要基于正则表达式。
提前致谢
编辑: 我希望长度等于或大于 8 的字母数字值
【问题讨论】:
-
请注意,当您有“长度大于 8”这样的要求时,您期望得到“4672j0j7”和“59800512”这样的结果似乎很奇怪。
-
@JvdV - 我在陈述问题时犯了错误。我希望长度等于或大于 8 的字母数字值。这正是在文本字符串中添加示例的原因:“4672j0j7”和“59800512”。我已经编辑了问题。
标签: python regex numeric re alphanumeric