用于在字符串中查找足球队固定装置的Python正则表达式

时间:2016-10-30 19:13:37

标签: python html regex string

我正在使用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')]

我希望能找到[('伯恩利 - 斯旺西城')]

非常感谢期待任何帮助!

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]*)+'