Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 美丽的汤和正则表达式_Python_Regex_Beautifulsoup - Fatal编程技术网

Python 美丽的汤和正则表达式

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种情况下

我用美丽的汤来识别一个特定的标签和它的内容。内容是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种情况下有效。但是,当我在我的一个源文件上运行此脚本时,它还匹配诸如“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}$