2017-04-26 63 views
0

我想創建一個正則表達式來匹配括號內的每個數值。正則表達式在括號內匹配數值

以下是我用於測試的regex101的鏈接。

例如用字符串:

目前,還沒有批准的療法直接靶向NRAS激活突變。然而,N-Ras激活可以預測對Raf/MEK/ERK,PI3K/Akt和其他下游途徑抑制劑的敏感性(23274911,22392911,2193244)。 MEK抑制劑trametinib和cobimetinib(與vemurafenib聯用)已獲FDA批准用於BRAF V600E和V600K突變型黑素瘤,目前正在臨牀試驗中用於實體瘤和血液惡性腫瘤的研究(22663011,25265494)。幾項臨牀前研究已經表明,MEK抑制劑與其他下游分子(例如PI3K,eIF4A和Plk1)的抑制劑的組合導致在體外和體內NRAS突變黑素瘤中的協同生長抑制(19492075)

我想匹配每個以粗體顯示的值。我目前正在使用以下內容

Pattern citationPattern = Pattern.compile("(.?\()(\\d+)"); 
     Matcher match = citationPattern.matcher(treatmentApproach); 

並且我能夠起來匹配圓括號中的每個第一個值。如何在括號內有多個值的情況下對其進行擴展。例如,(22663011,25265494)。謝謝你的幫助!

+0

您可以將'()'中的所有值拉出來,然後遍歷該結果。 https://regex101.com/r/tkQP8z/4然後,也許java有一個CSV解析器 – chris85

回答

2

我只是從字面()之間拉取匹配。類似的,

Pattern citationPattern = Pattern.compile("\\((.*?)\\)"); 
Matcher match = citationPattern.matcher(treatmentApproach); 
while (match.find()) { 
    System.out.println(match.group()); 
} 
+1

你的正則表達式是貪婪的;它會匹配所有'(a,b)不需要的(c,d)'。將'。*'(貪婪)改爲'。*?'(勉強) – Bohemian

+0

@波希米亞感謝。累了。 –

+0

看起來還是很累:) – Bohemian

0

我會用這樣的模式:[\(|, ](\d+)[, \)]

看到它在這裏的行動:https://regex101.com/r/hoggh0/1

這認爲這將下降[open brackets or ", "][close brackets or ", "]

的唯一途徑之間的任意數字是,如果你在文本中有數字在評論之間,但不在括號之間,並且希望排除它們。這將包括他們。