我必须将三个字符串粘在一起。
我有一个输入字符串(字符串 1),我必须在(字符串 2)上运行一个正则表达式(它有组)并提取这些组以使用反向引用将它们放入模板(字符串 3)中。
一个简短的例子可以是:
input: "foo1234bar5678"
regex: ".*?(\\d*).*?(\\d*).*"
template: "answer: $1 $2"
应在“answer: 1234 5678”中展开。
我一直在使用 java.util.regex.Pattern,但我想不出用匹配器来实现这一点的方法。显然,replaceAll 不是预期的行为,append* 也不是。
有没有办法使用 android API 很好地做到这一点?
编辑: 这是一个基本的实现:
public static String genOutput(String regex, String input, String template) {
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(input);
if (m.find()) {
for (int i = 1; i <= m.groupCount(); i++) {
template = template.replaceAll("\\$" + i, m.group(i));
}
}
return template;
}
最佳答案
下面是我的做法:
Pattern p = Pattern.compile("(?:\\D*(\\d*)\\D*)+");
Matcher m = p.matcher(input);
if (m.find()) {
String result = "answer: ";
for (int i = 1; i < m.groupCount(); i++) {
result += m.group(i) + " ";
}
System.out.println(result);
} else {
System.out.println("Input did not match");
}
这将匹配您的字符串,然后将这两个组用作 String
格式化程序的输入。
关于java - 提取数据并使用 RegEx 格式化它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4207387/