0

HGSV 命名法有一个模式:

xxxxx.yyyy:charactersnumbercharacters

我想在java中制作一个正则表达式并从上面获取所有标记,例如:它应该有5个标记:{'xxxxx','yyyy','characters','number','characters'}

我使用简单的拆分方法来获取令牌,但我没有找到最佳解决方案:

我当前的代码是:

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

我想在 Java 中使用 Pattern 和 Matcher。不知道,如何为上述令牌制作正则表达式。

任何线索如何做到这一点?(甚至分隔字符、数字、字符,我将使用正则表达式)。那么为什么不将 REGEX 用于整个令牌。

我找到了链接,但这是在 Python 中,我需要在 Java 中类似。

4

1 回答 1

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.
}

这真的很像 a split,但它更稳定,因为您使用该模式来String预先验证。

请注意,我不知道这是否是您应该使用的正确模式。我不知道您正在谈论的 HGSV 符号的确切细节,您的描述实际上很模糊。(什么是 egxxxxxyyyy?什么是“字符”?)如果您将我链接到该符号的某种规范或详细描述,我可以尝试编写一个更绝对正确的正则表达式。

无论如何,我的示例显示了基本思想。您还可以查看http://www.regular-expressions.info/brackets.html了解更多信息。

于 2017-06-06T01:47:26.070 回答