我正在使用 Beautiful Soup 来识别特定标签及其内容。内容是 html-links,我想提取这些标签的文本。
问题是文本是根据特定模式由不同数字组成的。我只对诸如“61993J0417”和“61991CJ0316”之类的数字感兴趣,当数字中间有“J”和“CJ”时,我需要正则表达式来匹配两者。
我已使用此代码来实现此目的:
soup.find_all(text=re.compile('[6][1-2][0-9]{3}[J]|[CJ][0-9]{4}'))
汤变量是特定标签的内容。此代码适用于 10 种情况中的 9 种。但是,当我在其中一个源文件上运行此脚本时,它还会匹配诸如“51987PC0716”之类的数字。
我不明白为什么,所以我向你寻求帮助。
最佳答案
您尚未指定 |
适用于什么;默认情况下,它是整个正则表达式,这意味着您已经要求
[6][1-2][0-9]{3}[J]
(这与
6[12][0-9]{3}J
相同)或CJ[0-9]{4}
(不是
[CJ]
,意思是“C 或 J”)。使用括号指定备选方案是什么:^6[12][0-9]{3}(J|CJ)[0-9]{4}$
哪个写得更好
^6[12][0-9]{3}C?J[0-9]{4}$
关于python - Beautiful Soup 和正则表达式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10310690/