2017-02-13 48 views
0

我試圖驗證表單域包含排球比賽的有效比分。下面是我有什麼,我認爲它的工作原理,但我不是正則表達式的專家,以任何方式:解析體育比分的正則表達式

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.允許任何數量的套> = 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 25-10

另外,我需要每個結果作爲解析。因此在上面的最後一個例子,我需要能夠獨立工作: 25-1 2 -25 25- 3 4 - 25 15-10

這將會是巨大的,如果我能剝每個結果中的空格。我不能僅僅去掉所有空格,因爲空格是結果集之間的有效分隔符。

回答

0

我認爲this是解決您的問題。

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

它是如何工作的:1個或2個號碼的 (\d{1,2})捕獲組。
\s*找到0個或更多空格。
-找到 - 。

$1替換捕獲組的內容的內容1
$2替換捕獲組2

,你也可以看看this的內容的內容。

+0

這當然比我想出的混亂更簡單。今天我會測試它對可能的分數輸入的各種排列。謝謝! –

+0

謝謝!這很好:)如果它適用於您,請接受答案以欣賞一些積分的答案; P –

+0

您的字符串並不完全取代我的,但它導致我一個更好的解決方案: –