2016-01-25 38 views
4

對於此示例文本:如何正則表達式環視表達式組合

敏捷的棕色狐狸跳過懶狗」是1 ***英語2 ***全字母短句,一個短語,包含所有它通常用於觸摸式練習,也用於測試打字機和計算機鍵盤,顯示字體以及涉及3 ***英文字母表中所有字母的其他應用程序4 ** *。

我需要一個正則表達式來匹配多個x ***令牌,同時去除前導空白和尾隨空白如果我的l模仿正則表達式的知識是正確的,那麼結果應該匹配成兩個單獨的環視組。

英語

英文字母

我有一個孤立的工作,但不是在串聯兩個表達式:

(?<=1\*\*\*\s).*(?=\s2\*\*\*) 
.... 
(?<=3\*\*\*\s).*(?=\s4\*\*\*) 

我曾嘗試各種方式向他們結合一個表達式但只得到不正確的結果。例如

(?<=1\*\*\*\s).*(?=\s2\*\*\*)\w+(?<=3\*\*\*\s).*(?=\s4\*\*\*) 

沒有匹配

我要指出,我有超過令牌格式控制,可以隨意根據便於使用正則表達式的建議之一。它只需要包含一系列大部分非字母數字字符,因此它不會在數據中本地找到。我的猜測是我可能需要至少兩個令牌;一開始,一端。

編輯: 我已經取得了進步,但我的正則表達式引擎表現不同來,在regex101:

(?<=1\*\*\*\s)(.*)(?=\s2\*\*\*).*?(?<=3\*\*\*\s)(.*)(?=\s4\*\*\*) 

結果:

英語2 *** 3 ** *英文

爲什麼?這怎麼可以糾正?

+0

聽起來你只需要一個採用懶點匹配的捕獲組:[\ d + \ * {3} \ s *(。*?)\ s * \ d + \ * {3}'](https://regex101.com/r/tH5vK6/3)。 –

+0

你想實現什麼?獲取匹配其中一個或另一個的正則表達式?或者得到一個正則表達式,其中一個組的匹配是「英語」,另一個匹配「英語字母」? – ndn

+0

我認爲這個例子我需要在兩個組中。問題是我正在使用專有的前端來使用正則表達式匹配使用正則表達式的命名「令牌」變量。在匹配的地方,指定的變量可以用來創建重新格式化的輸出。我假設這些變量使用了這些組。 – SPB

回答

1
(?<=[1-9]\*\*\*)\s*(.*?)(?=\s*[1-9]\*\*\*) 

您可以使用此功能並抓取group 1。查看演示。

https://regex101.com/r/cZ0sD2/9

如果只想要2比賽使用

(?<=[13]\*\*\*)\s*(.*?)(?=\s*[24]\*\*\*) 
+0

哇,那regex101太棒了! – SPB

+0

這幾乎可以工作,但我只需要組1和3. – SPB

+0

@SPB然後使用(?<= [13] \ * \ * * *)\ s *(。*?)(?= \ s * [24] \ * \ * \ *)' – vks

1

如果你想有一個正則表達式將匹配一個或另一個,你可以使用交替(|):

(?<=1\*\*\*\s).*(?=\s2\*\*\*)|(?<=3\*\*\*\s).*(?=\s4\*\*\*) 

See it in action


如果你想有一個正則表達式,將在不同的組一氣呵成同時匹配,你可以使用兩者之間.*?並把它們匹配的組(()):

(?<=1\*\*\*\s)(.*)(?=\s2\*\*\*).*?(?<=3\*\*\*\s)(.*)(?=\s4\*\*\*) 

See it in action