我必须在字符串中提取两个数字,这总是这样:
file_Sig201701311539043872_1736587_614007_marketing.000
我需要保存不同的值:
1736587
614007
我怎么能这样做?
我尝试使用:\_(.*?)\_
但无法正常工作。
答案 0 :(得分:1)
尝试以下pattern matcher:
final Pattern NUMBER_MATCHER = Pattern.compile("_(\\d+)_(\\d+)");
Matcher matcher = NUMBER_MATCHER.matcher(/* your file name */);
if (matcher.find()) {
System.out.println("matcher.group(1) = " + matcher.group(1));
System.out.println("matcher.group(2) = " + matcher.group(2));
}
打印:
matcher.group(1) = 1736587
matcher.group(2) = 614007
现在,正则表达式适用于下划线,后跟任意数字后跟下划线,然后是任意数字的数字。
答案 1 :(得分:1)
您可以利用外观:
(?<=_)(\\d+)(?=_)
捕获的组将包含所需的数字。
零宽度负面反馈,(?<=_)
确保匹配前面有_
零宽度负面反馈,(?=_)
确保匹配后跟_
(\d+)
匹配一个或多个数字并放入捕获的组
答案 2 :(得分:1)
试试这个。 示例代码
final Pattern NUMBER_MATCHER = Pattern.compile("_(\\d*)_(\\d*)");
Matcher matcher = NUMBER_MATCHER.matcher("file_Sig201701311539043872_1736587_614007_marketing.000");
if (matcher.find()) {
System.out.println(matcher.group(1));
System.out.println(matcher.group(2));
}