Java 使用正则表达式从字符串中提取数据

Java 使用正则表达式从字符串中提取数据,java,regex,Java,Regex,我将从字符串中提取业务价值。但我的问题是,字符串在循环中每次都会重复。内容语法总是一样的,但是内容在变化。 因此,我需要一个reg expr来帮助我提取数据 到目前为止,我所尝试的: (“^\\d{1,2}(.{1})\\s([A-Za-z]{2})\\s(([A-z]\\d{2,3}))\\s.” 但上述模式仅输出前三个参数: 01。Di F929 示例字符串显示如下所示: 1Di F929*Fr F929 Fr FREI Mo S688 Mi S49*Sa S57 Mo F929 是否F22

我将从字符串中提取业务价值。但我的问题是,字符串在循环中每次都会重复。内容语法总是一样的,但是内容在变化。 因此,我需要一个reg expr来帮助我提取数据

到目前为止,我所尝试的:
(“^\\d{1,2}(.{1})\\s([A-Za-z]{2})\\s(([A-z]\\d{2,3}))\\s.”

但上述模式仅输出前三个参数: 01。Di F929

示例字符串显示如下所示:

1Di F929*Fr F929 Fr FREI Mo S688 Mi S49*Sa S57 Mo F929 是否F224 So S49 Di X337 Fr F56 So频率\n 让我解释一下字符串是如何构建的

  • (01.)是从01到31的数字
  • 以下为短工作日(德语)(Mo、Di、Mi等)
  • 以字符开头的单词以数字结尾(F929,S49,…)
  • (可选)一个特殊字符,如“*,X,…”
  • 重要提示:Di+F929+*表示单个数据块。每个字符串包含大约12个数据块

    Di + F929 + * 我需要的是,一个符合上述问题的正则表达式。 谢谢你

    这将帮助您:

    (\d{1,2}\.)?\s*([A-Za-z]{2}\s+[A-Z0-9]+\s*[*X]?)\s*
    

    Java代码:

    public class Test {
        public static void main(String[] args) {
            Pattern pattern = Pattern.compile("(\\d{1,2}\\.)?\\s*([A-Za-z]{2}\\s+[A-Z0-9]+\\s*[*X]?)\\s*");
            String string = "01. Di F929 * Fr F929 Fr FREI Mo S688 Mi S49 * Sa S57 Mo F929 " +
                "Do F224 So S49 Di X337 Fr F56 So FREI \\n";
    
            Matcher m = pattern.matcher(string);
    
            while (m.find())
                System.out.println(m.group(2));
        }
    }
    

    嗯……你能告诉我们你想在这个示例字符串中匹配什么吗?试着删除
    ^
    锚点或者删除锚点
    ^
    对我没有帮助。字符串中的“FREI”一词不出现或不匹配。您想要实现的目标真的不清楚。请展示一些测试用例,包括输入字符串和预期输出。好的,我已经解决了。
    public class Test {
        public static void main(String[] args) {
            Pattern pattern = Pattern.compile("(\\d{1,2}\\.)?\\s*([A-Za-z]{2}\\s+[A-Z0-9]+\\s*[*X]?)\\s*");
            String string = "01. Di F929 * Fr F929 Fr FREI Mo S688 Mi S49 * Sa S57 Mo F929 " +
                "Do F224 So S49 Di X337 Fr F56 So FREI \\n";
    
            Matcher m = pattern.matcher(string);
    
            while (m.find())
                System.out.println(m.group(2));
        }
    }