我有字符串: String myStr =“Operation = myMethod \ nDataIn = A; B; C; D \ nDataOut = X; Y; Z \ n”
我希望匹配DataIn。
我有以下代码:
Pattern pattern = Pattern.compile("Operation=myMethod.*DataIn=(.*)?\n", Pattern.DOTALL);
Matcher matcher = pattern.matcher(myStr);
if (matcher.find()) {
return matcher.group(1);
}
问题是它正在返回:“A; B; C; D \ nDataOut = X; Y; Z \ n”
我尝试了模式:“Operation = myMethod。 DataIn =(。?\ n)” 然后它返回“A; B; C; D \ n”。我不希望返回最终的“\ n”。
答案 0 :(得分:2)
将正则表达式中的(.*)
替换为([^\n]*)
以匹配换行符,或([^\b]*)
匹配直到任何边界字符。
Pattern pattern = Pattern.compile("Operation=myMethod.*DataIn=([^\\n]*)?\n", Pattern.DOTALL);
Matcher matcher = pattern.matcher(myStr);
if (matcher.find()) {
return matcher.group(1);
}
字符类中的[^...]
构造,表示匹配此集合中不存在的任何字符。
答案 1 :(得分:1)
您可以使用:
Pattern pattern = Pattern.compile("Operation=myMethod.*?DataIn=([^\\n]*)", Pattern.DOTALL);
这将匹配组#1中的0个或更多字符,直到匹配\n
。
答案 2 :(得分:0)
尝试使用:
<强>模式强>
(?<=DataIn=)(.+?)(?=\\n)
<强> CODE 强>
Pattern pattern = Pattern.compile("(?<=DataIn=)(.+?)(?=\\n)", Pattern.DOTALL);
Matcher matcher = pattern.matcher(myStr);
if (matcher.find())
{
return matcher.group(1);
}
<强> INPUT 强>
Operation=myMethod\nDataIn=A;B;C;D\nDataOut=X;Y;Z\n
<强>输出强>
A;B;C;D
答案 3 :(得分:0)
(?s)(?<=DataIn=)(.+?)(?=\n)