2017-04-26 119 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 ", "]

的唯一途径之间的任意数字是,如果你在文本中有数字在评论之间,但不在括号之间,并且希望排除它们。这将包括他们。