[英]Is there anything wrong with this pattern matching code?
我想知道这段代码是否与模式匹配有问题
F_4(a,r;c,y;x,d)
要么
F_4\left(a,b;b,b;\frac{-xy}{(1-y)},\frac{v}{(1-x)}\right)
应该将具有F_4的任何东西(某物,某物;某物,某物;某物,某物)与表示某物的任何字符串或字符进行匹配。 谢谢。
while(line.contains("F_4")){
Pattern appellfiv = Pattern.compile("F_4[^(]*\\(([^,]+),([^;]+);([^,]+),([^;]+);([^,]+),([^)]+)\\)");
Matcher appellmatch = appellfiv.matcher(line);
while(appellmatch.find()) {
line = appellmatch.replaceAll("\\AppellFiv@{$1}{$2}{$3}{$4}{$5}{$6}");
}
}
您的最后一个参数为\\frac{v}{(1-x)}\\right
并在其中包含)
,因此您不能将[^)]+
用作最后一个参数的正则表达式。 您可以尝试使用[^,;]+
或.+
正则表达式作为最后一个参数。
更新以下代码适用于您的第一种情况:
String line = "F_4(a,r;c,y;x,d);F_4(z,p;o,q;m,n);";
line = line.replaceAll("F_4[^(]*\\(([^,]+),([^;]+);([^,]+),([^;]+);([^,]+),([^)]+)\\)", "\\AppellFiv@{$1}{$2}{$3}{$4}{$5}{$6}");
这是您可以尝试的正则表达式。 它与您的功能相同,但
进行了改革,以放宽文字要求,同时收紧间距。
# "F_4[^(;,]*\\(([^,]*),(?:([^;,]*)(?:;([^,]*))?),(?:([^;,]*)(?:;([^,]*))?),([^)]*)\\)"
F_4
[^(;,]*
\(
( [^,]* ) # (1)
,
(?:
( [^;,]* ) # (2)
(?:
;
( [^,]* ) # (3)
)?
)
,
(?:
( [^;,]* ) # (4)
(?:
;
( [^,]* ) # (5)
)?
)
,
( [^)]* ) # (6)
\)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.