我假設你的正則表達式是壓縮的。如果點的意思是縮寫。中間的首字母應該逃脫。下面的建議因素就像Barmar's一樣。如果您不想捕獲不同的名稱,請從它們中刪除括號。
對不起,它看起來像你打算它是一個點metachar。從中刪除\。
# (?:(BIOLOGIQUES)|(Dossier\ N\.\s+:))\s+((\d+)\s+(\d+)\s+\/\s+(\d+))
(?:
(BIOLOGIQUES) # (1)
| (Dossier\ N \. \s+ :) # (2)
)
\s+
( # (3 start)
(\d+) # (4)
\s+
(\d+) # (5)
\s+ \/ \s+
(\d+) # (6)
) # (3 end)
編輯,正則表達式應該被考慮,但如果它變得太不同,一種方式重新使用相同的捕獲組是使用Branch Reset
。
這是您的原始代碼,使用分支重置進行一些註釋。
(?|(BIOLOGIQUES\s+(\d+)\s+(\d+)\s+\/\s+(\d+))|(Dossier\ N.\s+:\s+(\d+)\s+(\d+)\s+\/\s+(\d+)))
(?|
br 1 ( # (1 start)
BIOLOGIQUES \s+
2 (\d+) # (2)
\s+
3 (\d+) # (3)
\s+ \/ \s+
4 (\d+) # (4)
1 ) # (1 end)
|
br 1 ( # (1 start)
Dossier\ N . \s+ : \s+
2 (\d+) # (2)
\s+
3 (\d+) # (3)
\s+ \/ \s+
4 (\d+) # (4)
1 ) # (1 end)
)
或者,你可以因素,並使用分支復位。
# (?|(BIOLOGIQUES\s+)|(Dossier\ N.\s+:\s+))(?:(\d+)\s+(\d+)\s+\/\s+(\d+))
(?|
br 1 (BIOLOGIQUES \s+) # (1)
|
br 1 (Dossier\ N . \s+ : \s+) # (1)
)
(?:
2 (\d+) # (2)
\s+
3 (\d+) # (3)
\s+ \/ \s+
4 (\d+) # (4)
)
來源
2013-10-02 22:16:05
sln
你有他們在同一個正則表達式。爲什麼不把它們分開? – 2013-10-02 21:49:18
如果這是您想要的行爲,那麼您的正則表達式應該更像「BIOLOGIQUES」或「Dossier N°:」後跟數字組「。 IOW,「或」條件僅對於正則表達式的第一個組件是必需的。 – user113215