使用java / android中的regexp提取序列后的所有字符

时间:2017-03-01 22:48:22

标签: java regex

想象一下这些字符串:

String s = "firstpartie_FOO_lastpartieofthestring"

String s = "lllalal_FOOBBARR_lastpartieofthestringofthedead"

使用regexp,我想在第二个" _"之后提取字符串。

我试过这个:

Pattern p = Pattern.compile("(?<=_[A-Z]*_)");
Matcher m = p.matcher("lllalal_FOOBBARR_lastpartieofthestringofthedead")

但是如何完成正则表达式以提取字符串&#34; lastpartieofthestringofthedead&#34; ?

3 个答案:

答案 0 :(得分:3)

如果您想修复方法,请使用捕获组捕获字符串的其余部分:

String s = "lllalal_FOOBBARR_lastpartieofthestringofthedead";
Pattern p = Pattern.compile("^[^_]*_[^_]*_(.*)", Pattern.DOTALL);
Matcher m = p.matcher(s);
if (m.find()) {
    System.out.println(m.group(1));
}
// => lastpartieofthestringofthedead

请参阅Java demo

此处^[^_]*_[^_]*_(.*)匹配字符串(^)的开头,0 {c}}以外的{+ 1}} _[^_]*,0 +除__以外的字符,然后将字符串的其余部分捕获到第1组(使用_)。

否则,使用(.*)分成3部分:

_

请参阅another demo

答案 1 :(得分:1)

试试这个,它会查找任意数量的字符,然后是_,然后是_后面的其他数量的字符,并捕获其他所有内容:

.*_.*_(.*)

关于Regex101的一个例子:

https://regex101.com/r/sfVyL2/1

答案 2 :(得分:0)

我发现了这种方式:

Pattern p = Pattern.compile("_[A-Z]*_(.*)");

我在正则表达式研究中取得进展嗨嗨; - )

说明:

...在下划线后跟任意数字(使用星号)的大写字符=&gt; [A-Z] *,后跟另一个下划线=&gt; _ [A-Z] * _

...,捕获所有字符=&gt; (。*)

在此处查找示例:https://ideone.com/S5WJMr