正则表达式用于解析体育比分

时间:2017-02-13 15:32:51

标签: regex

我试图验证表单字段是否包含排球比赛的有效分数。这就是我所拥有的,我认为它有效,但我不是正则表达的专家,无论如何:

r'^ *([0-9]{1,2} *- *[0-9]{1,2})((( *[,;] *)|([,;] *)|( *[,;])|[,;]| +)[0-9]{1,2} *- *[0-9]{1,2})* *$'

我使用的是python / django,而不是它对正则表达式匹配真的很重要。我也试图学习正则表达式,因此更优化的正则表达式将是有用/有用的。

以下是评分规则: 1.可以包含一个或多个有效集(集合=游戏)结果 2.每个结果必须是dd-dd形式,其中0 <= dd <= 99 3.每个附加结果必须用[,;]中的任何一个分隔。 4.允许包含任意数量的集&gt; = 1 5.除了数字中间外,任何地方都应该允许空格

所以,以下都是有效的: 25-10或25 -0或25-9或23-25(可能是一个或多个空格) 25-10,25-15或25-10; 25-15或25-10 25-15(再次允许空格) 25-1 2 -25,25-3; 4 - 25 15-10

另外,我需要将每个结果作为单独的单元进行解析。所以在上面的最后一个例子中,我需要能够分别处理: 25-1 2 -25 25-3 4 - 25 15-10

如果我可以从每个结果中删除空格,那就太棒了。我不能剥离所有空格,因为空格是结果集之间的有效分隔符。

1 个答案:

答案 0 :(得分:0)

我认为this是您问题的解决方案。

str.replace(r"(\d{1,2})\s*-\s*(\d{1,2})", "$1-$2")

工作原理: (\d{1,2})捕获1或2个数字的组 \s*找到0个或更多的空格 -找到 - 。

$1将内容替换为捕获组1的内容 $2将内容替换为捕获组2的内容

您还可以查看this