Python 美丽的汤和正则表达式
我用美丽的汤来识别一个特定的标签和它的内容。内容是html链接,我想提取这些标签的文本 问题是文本根据特定的模式由不同的数字组成。我只对诸如“6193J0417”和“61991 1CJ0316”这样的数字感兴趣,当中间有“J”和“CJ”时,我需要ReGEXP来匹配。p> 我使用此代码实现了以下目标:Python 美丽的汤和正则表达式,python,regex,beautifulsoup,Python,Regex,Beautifulsoup,我用美丽的汤来识别一个特定的标签和它的内容。内容是html链接,我想提取这些标签的文本 问题是文本根据特定的模式由不同的数字组成。我只对诸如“6193J0417”和“61991 1CJ0316”这样的数字感兴趣,当中间有“J”和“CJ”时,我需要ReGEXP来匹配。p> 我使用此代码实现了以下目标: soup.find_all(text=re.compile('[6][1-2][0-9]{3}[J]|[CJ][0-9]{4}')) soup变量是特定标记的内容。此代码在10种情况中有9种情况下
soup.find_all(text=re.compile('[6][1-2][0-9]{3}[J]|[CJ][0-9]{4}'))
soup变量是特定标记的内容。此代码在10种情况中有9种情况下有效。但是,当我在我的一个源文件上运行此脚本时,它还匹配诸如“51987PC0716”之类的数字
我不明白为什么我向你求助 IIUC,你的字符串中总是有一个“J”。
因此,使用问号将其设置为强制性,并将“C”设置为可选。
比如:
re.compile('6[1-2][0-9]{3}C?J[0-9]{4}')
我没有对此进行测试,但您可能可以自己从这里继续。您没有指定
|
适用于什么;默认情况下,它是整个正则表达式,这意味着您已经要求
[6][1-2][0-9]{3}[J]
(与6[12][0-9]{3}J
相同)或
(不是[CJ]
,意思是“C或J”)。使用括号指定备选方案:
^6[12][0-9]{3}(J|CJ)[0-9]{4}$
哪个写得更好
^6[12][0-9]{3}C?J[0-9]{4}$
在特定文件中,此正则表达式进行四个错误匹配:51987PC0716、51992PC0405、51992PC0405-C和51992PC0405-A09。如果我将正则表达式更改为“
”^[6][1-2][0-9]{3}[J]|[CJ][0-9]{4}$'
,它只会出现两个错误,并匹配51987PC0716和51992PC0405。
^6[12][0-9]{3}C?J[0-9]{4}$