我正在使用Requests模块从我的目标网站访问HTML,然后使用Beautiful Soup选择网站上的特定元素。有问题的元素是一张表格,其中包含了迄今为止英格兰超级联赛2016/2017赛季的成绩。该表包含比赛日期,所涉及的球队,全时得分和半场得分。我想使用Python来解析表元素的HTML并提取那里列出的fixture。团队总是列为:
A队 - B队
球队名称可以是1-3个单独的字符串(例如伯恩利,曼联,西汉姆联队。
到目前为止,我的尝试是:
导入重新 teamsRegex = re.compile(r'((\ w + \ s)+ - (\ s \ w +)+)')
我的逻辑是,第一个团队的长度可以是1-3个单独的字符串,每个字符串后面总是跟一个空格。因此,模式(\ w + \ s)+表示任意长度后跟空格的字符串,可以重复1次或多次。第二个团队名称将始终以“ - ”字符后面的空格开头,并且可以是任意长度的字符串,重复1次或多次(\ s \ w +)+。
我有点达到了预期的效果,但上述情况并不完全正确。我返回一个列表,其中我在索引0处得到了我想要的结果,然后是索引0的第一个字符串作为索引1,而索引0中的最后一个字符串作为索引2。
示例字符串:
'伯恩利 - 斯旺西城市对齐=中心宽度= 45> 0-1对齐=中心> (0-0)'
Regex发现:
[('伯恩利 - 斯旺西城','伯恩利','城市'),('0 - 1','0','1')]
我希望能找到[('伯恩利 - 斯旺西城')]
非常感谢期待任何帮助!
答案 0 :(得分:1)
r'(?:[A-Z][a-z]*\s)+-(?:\s[A-Z][a-z]*)+'
这里有两个非捕获(?:
,因此您将获得完全匹配)组以匹配团队的名称。我选择明确地使用字母,因此表达式只匹配以大写字母开头并排除数字的单词。如果球队的名字可以包含数字(如“BVB 09”),您应该更改。
根据HTML文件的内容,可以添加最终预测(?= align)
以增加特定性。
修改强> 要匹配最多三个大写字母和可选的'&',请尝试以下方法:
r'(?:[A-Z&]{1,3}[a-z]*\s)+-(?:\s[A-Z&]{1,3}[a-z]*)+'