我有几句话,但我只希望获得ID之后的内容。我可以知道正则表达式是做什么的吗?
10460923_4|72 74|DHF
10460923_6|24 57|IgM capture enzyme - linked immunoassay
10460923_7|26 28|DHF
10460923_14|0 12|IgM antibodies
10467781_2|157 161|DEN - 1
10467781_5|3 8|DEN 1 - 4
10467781_6|155 160|DEN 1 - 4
10469270_1|9 38|transforming growth factor - beta 1
10469270_3|34 63|Transforming Growth Factor - beta 1
10469270_3|65 73|TGF - beta1
10469270_4|5 26|TGF - beta1 - specific mRNA
10469270_5|27 42|TGF - beta1 protein
10469270_6|20 35|TGF - beta1 protein
10469270_7|41 49|TGF - beta1
10469270_9|4 12|TGF - beta1
答案 0 :(得分:2)
您只需使用String#substring()
作为
String str = "10469270_9|4 12|TGF - beta1";
System.out.println(str.substring(str.lastIndexOf('|') + 1)); // TGF - beta1
如果您想保存所有令牌,请使用String#split()
作为
String str = "10460923_4|72 74|DHF";
System.out.println(str.split("\\|")[2]); // DHF
答案 1 :(得分:0)
你应该选择Ravi的解决方案,这个解决方案至少可以维护,而且可能更有效。
如果由于某种原因你确实需要正则表达式,则应该执行以下操作:
(?<=\|)[^|]*
如此regex101所示。不要忘记将Java String中的\
翻倍!
(?<=\|)
是positive look-behind,并在匹配的字符串前检查|
。
[^|]
是所有字符的集合,但|
*
是一个贪婪的0-n量词
因此,(?<=\|)[^|]*
会尽可能多地匹配|
之后的非|
个字符。
不要将它与全局g
标志一起使用,它依赖于第一个符合|
后跟您想要的数据。