如何提取角色的第二次出现?

时间:2015-01-26 09:56:36

标签: java regex substring

如何从此

中提取'1358751074-6824'
http://api.discogs.com/images/R-1169056-1358751074-6824.jpeg

并且还需要从此

中提取'13587510746824'
http://api.discogs.com/images/R-1169056-13587510746824.jpeg

所以我认为我可以通过从'最后一个路径组件的第二个到最后一个点'进行子串,但是如何计算第二个 -

3 个答案:

答案 0 :(得分:2)

根据字符串允许的变化,您可以执行以下操作:

String extract = s.replaceAll(".*?-.*?-([\\d-]+).*", "$1");
  • .*?-跳过第一个连字符
  • .*?-跳过第二个连字符
  • ([\\d-]+)是您要保留的部分:数字和连字符
  • .*跳过字符串的其余部分

答案 1 :(得分:0)

你可以在没有正则表达式的情况下计算出第二个破折号的位置 - 找到第一个破折号的位置,并从那里开始工作:

int pos = str.indexOf('-', str.indexOf('-')+1);

Demo.

答案 2 :(得分:0)

您可以尝试这样的事情:

// Your original String
String str = "http://api.discogs.com/images/R-1169056-1358751074-6824.jpeg";

// identify the one-before-last-dash
int i=str.lastIndexOf("-", str.lastIndexOf("-")-1);

// Extract the value you want
String newStr = str.substring(i+1, str.lastIndexOf("."));

// Return numeric value only
String strNums = newStr.replaceAll("[^?0-9]+", "");