2017-06-06 43 views
0

HGSV命名法具有圖案:經常在Java hgsv符號表達

xxxxx.yyyy:charactersnumbercharacters

我想作在Java一個正則表達式和取從上面例如所有的令牌: 它應該有5個標記: {「XXXXX」,「YYYY」,「文字」,「號」,「人物」}

我用簡單的拆分方法,以獲取令牌,但我沒有找到其最佳解決方案:

我當前的代碼是:

String hgsv = "BRAF.p:V600E"; 
String[] tokens = hgsv.split("."); 
this.symbol = tokens[0]; 
String type = tokens[1].split(":")[0]; 

我想用Pattern和Matcher在Java中。不知道,如何爲上述標記製作正則表達式。

任何線索如何做到這一點? (即使分開字符,數字,字符我將使用正則表達式)。那麼爲什麼不使用REGEX作爲整個令牌。

我發現link但這是Python,我需要在Java中類似。

回答

1

我想你可能尋找的是使用捕捉組,就像這樣:

String s = "BRAF.p:V600E"; 
Pattern p = Pattern.compile("(\\w+)\\.(\\w+):([a-zA-Z]+)(\\d+)([a-zA-Z]+)"); 
Matcher m = p.matcher(s); 
if (m.matches()) { 
    String[] parts = {m.group(1), 
         m.group(2), 
         m.group(3), 
         m.group(4), 
         m.group(5)}; 
    // Prints "[BRAF, p, V, 600, E]" 
    System.out.println(Arrays.toString(parts)); 
} else { 
    // The input String is invalid. 
} 

這真的只是一個很像split,但因爲你正在使用的模式更穩定事先驗證String

請注意,我不知道您是否應該使用完全正確的模式。我不知道你所說的HGSV符號的確切細節,你的描述其實很含糊。 (什麼是例如xxxxxyyyy?什麼是「字符」?)如果您將我與某種規範或此符號的詳細描述聯繫起來,我可以嘗試編寫一個更正確的正則表達式。

無論如何,我的例子顯示了基本的想法。您可能還會看到http://www.regular-expressions.info/brackets.html以獲取更多信息。

+0

感謝它的工作 – virsha

+0

關於此{請注意,我不知道您是否應該使用完全正確的模式。我不知道你所說的HGSV符號的具體細節,你的描述實際上很模糊} - 請找到這個鏈接:http://varnomen.hgvs.org/bg-material/simple/ – virsha