gpt4 book ai didi

java - 在文本文件上多次匹配模式?

转载 作者:行者123 更新时间:2023-12-01 08:12:55 25 4
gpt4 key购买 nike

问题:

在 Java 中,我将解析脚本并从以

开头的文件中提取任何文本
    ${GLOBAL_} or ${AUTO_}

我想拾取直到最后一个花括号的所有内容,例如,如果我有以下字符串:

    "this is a String ${AUTO_TEST_f} body ${GLOBAL_SYNC} ${AUTO_2} ${OTHER_VAR}"

结果应该是:

${AUTO_TEST_f} 

${GLOBAL_SYNC}

${AUTO_2}

我尝试过的:

我尝试创建正则表达式模式(我相信确实有效)并使用它们来创建匹配器。然后,我尝试使用匹配器将所有匹配项打印到控制台,但遇到了一些问题。由于某种原因,它跳过了 ${GLOBAL_VARIABLE_1}。另外,我怎样才能实现这个来给我所有的比赛? while 循环 [while match.group(0) != null]?

这是我的代码:

 String re1="(\\$)";    // Any Single Character 1
String re2="(\\{)"; // Any Single Character 2
String re3="(G)"; // Any Single Character 3
String re4="(L)"; // Any Single Character 4
String re5="(O)"; // Any Single Character 5
String re6="(B)"; // Any Single Character 6
String re7="(A)"; // Any Single Character 7
String re8="(L)"; // Any Single Character 8
String re9="(_)"; // Any Single Character 9
String re10="(.*?)"; // Any Single Character 10
String re11="(\\})"; // Any Single Character 11


String r1="(\\$)"; // Any Single Character 1
String r2="(\\{)"; // Any Single Character 2
String r3="(A)"; // Any Single Character 3
String r4="(U)"; // Any Single Character 4
String r5="(T)"; // Any Single Character 5
String r6="(O)"; // Any Single Character 6
String r7="(_)"; // Any Single Character 7
String r8="(.*?)"; // Any Single Character 8
String r9="(\\})"; // Any Single Character 9

Pattern p = Pattern.compile((re1+re2+re3+re4+re5+re6+re7+re8+re9+re10+re11));
Pattern p2 = Pattern.compile(r1+r2+r3+r4+r5+r6+r7+r8+r9);

Matcher m = p.matcher(txt);
Matcher m1 = p2.matcher(txt);
m1.find();
System.out.println(m1.group(0));
m.find();
System.out.println(m.group(0));

这是控制台结果:

 Actual Results:
${AUTO_1}
${GLOBAL_VARIABLE_2}

这是我的预期结果:

 Expected Results:
${GLOBAL_VARIABLE_1}
${AUTO_1}
${GLOBAL_VARIABLE_2}
${GLOBAL_VARIABLE_3}

谢谢!

最佳答案

不要过于复杂化:

String txt = "this is a String ${AUTO_TEST_f} body ${GLOBAL_SYNC} ${AUTO_2}";
String regex = "\\$\\{(AUTO|GLOBAL)_(.*?)\\}";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(txt);
while (matcher.find()) {
System.out.println(matcher.group() + "\t->\t" + matcher.group(2) + "\t(" + matcher.group(1) + ")" );
}

输出:

${AUTO_TEST_f}  ->  TEST_f  (AUTO)
${GLOBAL_SYNC} -> SYNC (GLOBAL)
${AUTO_2} -> 2 (AUTO)

关于java - 在文本文件上多次匹配模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15908197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com