需要一个在两个"之间提取字符串的正则表达式"串

时间:2016-04-15 16:45:38

标签: java regex

我需要在 by _ _on 之间输入字符串。
到目前为止,我有这个,但不明白如何截断实际的"字符串分隔符":
by_(.*)_on

示例输入:
Files_by_wesasegeaazedude_on_January_26.jpg
当前比赛:
by_wesasegeaazedude_on
需要匹配:
wesasegeaazedude

3 个答案:

答案 0 :(得分:1)

您只需使用正面外观

String regex = "(?<=by_).*(?=_on)";  

这个正则表达式的作用是:

  1. 匹配任何内容:.*
  2. 前面有by_(?<=by_)
  3. 后跟_on(?=_on)

答案 1 :(得分:1)

你的表达很好 * 。您需要做的就是提取第一个捕获组的内容:

Pattern regex = Pattern.compile("by_(.*)_on");
String str = "Files_by_wesasegeaazedude_on_January_26.jpg";
Matcher m = regex.matcher(str);
if (m.find()) {
    String res = m.group(1);
}

Demo.

* 好吧,差不多好。如果您希望在同一行上输入多个文件名,您可能需要考虑使用不情愿的限定符,即by_(.*?)_on

答案 2 :(得分:1)

如果没有正则表达式,我会这样做。

int start = str.indexOf("by_");
int end = str.indexOf("_on", start + 1); // or lastIndexOf("_on"), for greedy match.
assert start > 0 && end > start;
String part = str.substring(start + 3, end);