2013-01-22 51 views
1

我正在處理將一個正則表達式應用於字符串並返回第一個匹配項的代碼片段。我無權修改代碼以返回所有匹配,也無法實現替代代碼。正則表達式 - 將所有匹配項作爲單個匹配項返回

我有以下的示例目標串:

用戶A,用戶B ,,用戶C ,, userd,usere,userf,

這是來自多個源連接逗號分隔用戶名列表其中一些空白,導致一些地方出現兩個逗號。我試圖編寫一個正則表達式,它將返回除特定值之外的所有逗號分隔的用戶名。

例如,考慮以下表達式:

[^,]\w{1,},(?<!(userb|userc|userd),) 

這導致三個匹配:

用戶A,

usere,

userf,

有什麼方法可以將這些結果作爲單個匹配而不是匹配集合來獲得包含文字'usera,usere,userf'的單個比賽?

如果我可以用任何語言編寫代碼,這將是微不足道的,但我只限於輸入目標字符串和模式,我需要一個匹配,除了我是遺漏。我不確定這是否可能,我用正則表達式處理的所有內容都涉及處理匹配集合中的多個項目。

這是一個正則表達式教程的例子。這張圖片顯示了我想要的三場比賽,但我的要求是在單場比賽中輸入文字,而不是三場單獨的比賽。

enter image description here

EDIT1: 爲了闡明此票證具體旨在解決僅使用正則表達式語法的使用情況。在代碼中解決這個問題是微不足道的,但僅僅使用正則表達式來解決這個問題是需要考慮到執行代碼是我不想反向工程,包裝或替換的第三方產品的一部分。

+0

您使用什麼語言? –

+0

正則表達式不是一種完整的語言;在沒有任何支持代碼的情況下獲得你想要的東西可能非常困難。 – StilesCrisis

+0

正則表達式正在使用JAVA進行處理,因此它將遵循JAVA的處理規則,但我無法訪問底層代碼來修改它。這是具有非常具體輸入的實用程序的一部分,我無法修改@Eric的 – Eric

回答

2

有什麼辦法可以將這些結果作爲單個匹配而不是匹配集合來獲得有文字'usera,usere,userf,'的單場比賽?

編號正則表達式匹配是連續的。

正則表達式從開始到結束匹配(子)字符串。你不能放棄中間部分,這不是正則表達式引擎的工作原理。但是你可以再次應用表達式來找到另一個匹配的子字符串(增量搜索 - 這正是Regex Coach所做的)。這將導致一個匹配集合。


話雖這麼說,你也可以只匹配一切你希望保留和刪除,例如

,(?=[\s,]+)|(userb|userc|userd)[\s,]* 

http://rubular.com/r/LOKOg6IeBa

+0

這很聰明,應該適合我。謝謝 – Eric

相關問題