2017-03-28 100 views
0

如何使用簡單的正則表達式匹配多個組。我嘗試這個:(?:key:)((?:\s*'[^']+')),但不起作用。正則表達式匹配組

輸入

鍵: 'VAL1' 'val2的' 'VAL3'

輸出

組1 = VAL1

組2 = val2的

組3 = VAL3

編輯:如何在所需的鍵後找到由簡單引號括起來的所有標籤?

+0

可能與以下情​​況重複:http://stackoverflow.com/questions/37003623/how-to-capture-multiple-repeated-groups –

+0

,這不能解決我的問題 –

+0

發表一個結果應該是什麼樣的例子。也儘可能詳細地解釋搜索模式。就像你說的那樣,「羣」......一羣是什麼? – zer00ne

回答

0

你不能直接做你想做的。使用正則表達式,您不能擁有可變數量的捕獲組。

但是,如果你的組數量有限,那麼你可以重複(?:\s*('[^']+')*)?那個限制。因此,爲了能夠匹配你給出的例子,你需要。

key:(?:\s*('[^']+')*)?(?:\s*('[^']+')*)?(?:\s*('[^']+')*)? 

注意(?:\s*('[^']+')*)?已經重複3次。

Live preview

可能更容易,更好地只是遍歷這個模式'[^']+'。正如你沒有提到任何語言,我冒昧地在Python中做這件事。

import re 
string = "'val1' 'val2' 'val3'" 
for i, match in enumerate(re.finditer(r"'([^']+)'", string), start=1): 
    print("group %d = %s" % (i, match.group(1))) 

上面在被執行時將打印:

組1 = VAL1

組2 = val2的

組3 = VAL3

所以,而不是試圖製作一個「可變」數量的捕獲組。相反,請嘗試迭代報價模式的所有匹配項。

0

我使用以下正則表達式解決了此問題:(?:key:\G)|('[^']+')+,here是檢查其工作原理的鏈接。

+0

您沒有解決問題https://regex101.com/r/btiVeq/4 – sln