这个程序应该匹配
(如(FD))_Ñ
并将其转换为
\ pochhammer {如(FD)} {N}
但是,它没有正确转换字符串。正在转换
W_n(-a ^ 2; A,B,C,d)=(A + B)_n(A + C)_n(A + d)_n \ ,,
到
W_n \ pochhammer {-a ^ 2; A,B,C,d)=(A + B} {N} \ {pochhammer A + C} {N} \ {pochhammer一个+ d} {N} \ ,,
什么时候应该转换为
W_n(-a ^ 2; A,B,C,d)= \ pochhammer {A + B} {N} \ {pochhammer A + C} {N} \ {pochhammer一个+ d} {N} \ ,,
这是我的代码:
while(scanner.hasNextLine()) {
String line = scanner.nextLine();
Pattern cpochhammer = Pattern.compile("(\\((.*?)\\)_\\{([^}]+)\\})");
Matcher pochhammer = cpochhammer.matcher(line);
StringBuffer rplcmntBfr = new StringBuffer();
while(pochhammer.find()) {
pochhammer.appendReplacement(rplcmntBfr, "\\\\pochhammer{$2}{$3}");
}
pochhammer.appendTail(rplcmntBfr);
Pattern npochhammer = Pattern.compile("(\\((.*?)\\)_(.))");
Matcher ppochhammer = npochhammer.matcher(rplcmntBfr. toString() );
rplcmntBfr.setLength(0);
while(ppochhammer.find()) {
ppochhammer.appendReplacement(rplcmntBfr, "\\\\pochhammer{$2}{$3}");
}
ppochhammer.appendTail(rplcmntBfr);
writer.println(rplcmntBfr);
}
感谢。
答案 0 :(得分:1)
我可能会弄错,但也许你正在寻找像
这样的东西String replaced = line.replaceAll("\\(([^)]*)\\)_(\\w+)", "\\\\pochhammer{$1}{$2}");
// ^^^^
// You can use \\d or \\d+ instead
// this part. I am not sure what `n` can be
当您更详细地描述您的问题时,我可以尝试纠正我的答案,例如您在第一次循环中尝试实现的目标?将"(\\((.*?)\\)_\\{([^}]+)\\})"
替换为\\\\pochhammer{$2}{$3}
似乎毫无意义,因为您的输入中没有(xxx)_{n}
。
因此,第二个正则表达式(\\((.*?)\\)_(.))
似乎只有问题。如果你仔细看看它,你不需要你的外括号,因为他们只会组1组2,所以而不是
(\\((.*?)\\)_(.)) you can use
\\((.*?)\\)_(.)
接下来就是您正在使用.*?
,这意味着可以匹配任何字符,因此\\((.*?)\\)_
将匹配任何字符(
和最后)
_
像你的情况一样
W_n(-a^2;a,b,c,d)=(a+b)_n(a+c)_n(a+d)_n\,,
^^^^^^^^^^^^^^^^^^
this part
结果为您提供
W_n\pochhammer{-a^2;a,b,c,d)=(a+b}{n}\pochhammer{a+c}{n}\pochhammer{a+d}{n}\,,
^^^^^^^^^^^^^^^^^^
要解决此问题,您可以在我的解决方案中使用[^)]
代替.
。这样,您只会匹配单个而不是嵌套的括号,例如(xxx)
,因为x
在这种情况下不能是)
([^)]
表示 - 除{{{}之外的每个字符1}})。