java - 提取数据并使用 RegEx 格式化它们

标签 java android regex

我必须将三个字符串粘在一起。

我有一个输入字符串(字符串 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/

相关文章:

java - 创建一个 backtype.storm.tuple.Tuple 用于测试目的?

java - 存储具有多个元素的元素

android - 如何将可扩展回收器 View 的父 View 设置为默认展开

regex - 获得等效于GNU grep并支持否定后向的最简单方法是什么?

javascript - 确定 javascript 正则表达式中有多少个捕获组?

java - 尝试在空对象引用上调用 ScrollView.removeAllViews()

java - TDD:测试等待功能

android - 如何在手机开机时在后台永久运行 android 应用程序?

java - 向适配器添加新数据会影响初始值

regex - Perl 5 - 正则表达式中最长的标记匹配(使用交替)