我想用“_”
替换请求文本我想过使用java分组正则表达式语法。但我搞砸了。
这是我的意见:
无法处理请求0 [null-> null s:0 w:0.0 a:0.0 S:0 t:24543060 关于主题RealTimeUpdate的s(NA)(0 0)]
预期产出:
无法处理主题RealTimeUpdate
上的请求_
b部分
如何在文本中删除此模式的所有实例?
输入:
无法处理请求0 [null-> null s:0 w:0.0 a:0.0 S:0 t:24543060 主题RealTimeUpdate上的s(NA)(0 0)]。请求为:0 [null-> null s:0 w:0.0a:0.0 S:0t:24543060s(NA)(0 0)]
预期产出:
无法处理主题RealTimeUpdate上的请求_。请求是:_
这是我的尝试:
Pattern p = Pattern.compile("(\"Failed to handle request\")(\\d)("[")(.*)(\"]\")(.*)");
Matcher m = p.matcher(input);
if (m.find()) {
String output = m.replaceAll("$1"+"$2"+"$3"+"_"+"$5"+"$6");
}
或
如果我承诺该模式以"[null->null"
开头:
str.replaceAll((\\d)(\"[null->null\")(*.)(\"]\")", "X");
答案 0 :(得分:2)
使用零宽度正面观察:
str.replaceAll( "(?<=request )\\d\\[.*?\\]", "_");
答案 1 :(得分:1)
我现在不完全是您的请求语法,但假设它由一个数字后跟括号中的文本组成,您可以使用str = str.replaceAll( "\\d\\[.*?\\]", "_");
。
答案 2 :(得分:1)
如果要删除Failed to handle request
和on subject.*
之间的所有内容,您可能确实使用了java regex分组。以下是:
output = input;
Pattern pattern = Pattern.compile("Failed to handle request (.+) on subject.*");
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
String request = matcher.group(1);
output = input.replace(request, "_");
}
更快的是捕获除请求之外的所有内容然后将它们放在一起:
output = input;
Pattern pattern = Pattern.compile("(Failed to handle request ).+( on subject.*)");
Matcher matcher = pattern.matcher(input);
if (matcher.find()) {
String beforeRequest = matcher.group(1);
String afterRequest = matcher.group(2);
output = beforeRequest + "_" + afterRequest;
}
让我们来看看针Pattern
:
(Failed to handle request ).+( on subject.*)
您可以在此处找到解释:https://regex101.com/r/xB6yW8/1