字串 1: {{word1|word2|word3 (word4 word5)|word6}}
字串2: {{word1|word2|word3|word6}}
用這個正則運算式:
(?<=\{\{)(\w (?:\s \w )*)\|(\w (?:\s \w )*)\|(\w (?:\s \w )*)\|(\w (?:\s \w )*)(?=\}\})
我將String2捕獲為組。如何更改正則運算式以將其(word4 word5)作為一個組捕獲?
uj5u.com熱心網友回復:
您可以添加一個(?:\s*(\([^()]*\)))?子模式:
(?<=\{\{)(\w (?:\s \w )*)\|(\w (?:\s \w )*)\|(\w (?:\s \w )*)(?:\s*(\([^()]*\)))?\|(\w (?:\s \w )*)(?=\}\})
請參閱正則運算式演示。
該(?:\s*(\([^()]*\)))?部分是一個可選的非捕獲組,匹配一次或零次出現
\s*- 零個或多個空格(- 開始捕獲組:\(- 一個(字符[^()]*- 除(和之外的零個或多個字符)\)- 一個)字符
)- 小組結束。
如果您需要確保括號內只允許使用空格分隔的單詞,請替換[^()]*為\w (?:\s \w )*并插入(?:\s*(\(\w (?:\s \w )*\)))?:
(?<=\{\{)(\w (?:\s \w )*)\|(\w (?:\s \w )*)\|(\w (?:\s \w )*)(?:\s*(\(\w (?:\s \w )*\)))?\|(\w (?:\s \w )*)(?=\}\})
請參閱此正則運算式演示。
uj5u.com熱心網友回復:
您可以通過匹配所需的子字串而不是捕獲它們來簡化運算式。為此,您可以使用以下正則運算式。
(?<=[{| ])\w (?=[}| ])|\([\w ] \)
正則運算式演示 < ˉ\ (ツ) /ˉ > Python 演示
運算式的元素如下。
(?<= # begin a positive lookbehind
[{| ] # match one of the indicated characters
) # end the positive lookbehind
\w # match one or more word characters
(?= # begin a positive lookahead
[}| ] # match one of the indicated characters
) # end positive lookahead
| # or
\( # match character
[\w ] # match one or more of the indicated characters
\) # match character
請注意,這不會驗證字串的格式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/336647.html
