我正在使用 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/

10-12 21:20