我試圖從字符串中提取數字組。 這些數字既可以單獨使用,也可以作爲\d+ - \d+
格式的範圍,而兩個數字之間的範圍指示符可以不同,並且數字可以使用前綴M-
或STR
。這些組可以在給定的字符串中出現1到n次,但是如果一個組後面跟着任何不是數字,空格或上面提到的前綴之一的字符,則匹配應該停止,即使後面還可以找到更多的數字。全局正則表達式匹配停止中間字符串
作爲一個例子,下面幾行
01
05,07
05, 7
M-01, M-12
311,STR 02
M-56
STR 17
01 - Random String 25-31 Random other string
M-04 Random String 01
M-17,3,148,14 to 31
M-17,3,STR 148,14 to 31 - Random String
M-17,3,148,14- 31 Random, String 02 Random, other string
STR 17,3,12 to 18, 148 ,M-14- 31 : Random String 02
應該返回
01
05;07
05;7
01;12
311;02
56
17
01
04
17;3;148;14 to 31
17;3;148;14 to 31
17;3;148;14- 31
17;3;12 to 18;148;14- 31
我使用javascript和運行
var pattern = /(\d+)\s?(?:-|~|to)?\s?(\d+)?/ig
while (result = pattern.exec(line)) {console.log(result)}
,但我幾乎可以得到正確的結果不知道如何在第一個字符串後不匹配數字,即M-17,3,148,14 to 31 - Random string 46 Random string
將retu值17;3;148;14 to 31;46
,而46不應該匹配。
我並不是真的擔心結果的格式,因爲我無論如何正在消毒它們,因此'03 '
返回爲'03'
或'03 '
並不重要。對於數字範圍也是如此,15 - 17
既可以作爲15 - 17
返回,也可以如上例所示,使用捕獲組來確定上限和下限,但我仍然需要能夠判斷兩個數字是分開還是範圍,所以5,8,10-12
不能作爲5;8;10;12
返回。
我的最終目標是提取每行中的所有可能的值。在提取所有數字範圍後,我循環遍歷每個結果以獲得所有可能的值,例如, 5,8,10-12將變成5; 8; 10; 11; 12。
如果它在某種程度上是可能的,而且這純粹是可選的,我還想在最後一個數字範圍後保留字符串,例如, STR 14, 23 Some String 18 Some other string
應返回14;23
並單獨返回Some String 18 Some other string
。
如果有人有關於如何解決這個問題的想法,我將不勝感激。
這工作非常好。比我原來的解決方案好得多。非常感謝您的努力! – mmuffins