2016-05-30 74 views
3

這裏是我的正則表達式測試字符串,正則非捕捉組

DDD001_1_2016_6TP2_1

我需要捕捉DDD001_1_20 _在一個捕獲6TP2 _1組和忽略下劃線。我已經嘗試了下面的正則表達式,即使是一個非捕獲組,我仍然無法捕獲我想要的。

^(.*?)_.*?_\d{2}(\d{2}(?:_).*)_.*$

從我的研究,它看起來像它不可能通過正則表達式忽略字符在特定的捕獲組,它必須與第2步如完成。代碼

任何幫助將不勝感激。

+0

您正在使用哪種語言? – AKS

+0

在應用正則表達式選項之前剝去所有下劃線*或者,使用多個捕獲組可以嗎? – Bohemian

回答

2

總之:你不能。一個匹配總是連續的,即使它包含了作爲零寬度斷言的東西,如果你想要找到下一個字符,就無法匹配下一個字符。

然而,大多數的正則表達式匹配的在更寬的編程環境,其中可以使用嵌套捕捉組,隨後的正則表達式或手動操作來過濾的最後一個下劃線的上下文中執行。

0

@ZephyrPellerin說的是正確的。

雖然它不可能過濾掉下劃線,仍然可以捕捉到你,然後可以在任何方式,在您所使用的語言進行訪問不同的匹配羣體的需要。

這是DEMO

我使用的正則表達式是:(?<=_\d{2})(.+)(?=_(.+)_)

這裏之前下劃線在第一括號捕獲的部分之後的部分是第二個。如果需要,可以將它們串聯起來形成一個字符串。

希望這會有所幫助。