gpt4 book ai didi

java - 跳过某些字符之间的正则表达式匹配

转载 作者:行者123 更新时间:2023-11-29 04:48:59 32 4
gpt4 key购买 nike

在下面的程序中,我试图在任何以“_”开头的文本前加上单词“app”:

 String s = "C_NAME=\"usco _f2 re_col\" &&_f1=\"ot\" && _f1 = \"fd\"|stats count(_f1)|fields _f1, f3|filter match(app_f1,\"get\")|extract field=\".*?\\[\\d+\\s+(?<_LogLevel>\\w+).*";

StringBuilder s1 = new StringBuilder(s);
java.util.regex.Pattern p = java.util.regex.Pattern.compile(".*?((?<!\\w)_\\w+).*?",
Pattern.UNICODE_CHARACTER_CLASS);
Matcher m = p.matcher(s);
while (m.find()) {
String fieldname = m.group(1);
s1.replace(m.start(1), m.end(1), "app" + fieldname);
m.reset(s1);

}
System.out.println(s1.toString());

但是,我还有一个条款需要注意:如果文本位于一对双引号之间,则上面的正则表达式不应将文本“app”附加到以“_”开头的文本。在此特定示例中,文本“_f2”不应添加前缀。关于如何实现此功能的任何线索?

更新:


以下正则表达式在我的例子中运行良好:

Pattern p = Pattern.compile(".*?(?:\"[^\"]*\"|((?<!\\w)_\\w+)).*?",
Pattern.UNICODE_CHARACTER_CLASS);

最佳答案

由于 (*SKIP)(*FAIL) 未在 Java 中实现,因此您需要自己想出一些逻辑:

What_I_want_to_avoid|(What_I_want_to_match)

因此,在您的情况下:

"[^"]*"|(\b_\w+)
# left: anything between two double quotes
# right: a word boundary, an underscore and at least one word character

匹配左侧分支中不需要的所有内容,如果第 1 组存在,请在此处进行替换。
参见 a demo on regex101.com .

关于java - 跳过某些字符之间的正则表达式匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36146287/

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