【发布时间】:2014-03-05 04:57:33
【问题描述】:
这个程序应该匹配
(as(fd))_n
并将其转换为
\pochhammer{as(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{a+d}{n}\ ,,
什么时候应该转换成
W_n(-a^2;a,b,c,d)=\pochhammer{a+b}{n}\pochhammer{a+c}{n}\pochhammer{a+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);
}
谢谢。
【问题讨论】:
-
match (as(fd))_n- 你能详细说明一下吗?显然,以您的示例为例,您的意思不是那个文字字符串;你想匹配什么? -
如果你有嵌套的括号,java 的正则表达式现在无法处理这些。
-
Jerry 是对的,找到平衡括号的唯一方法是使用支持递归的第三方正则表达式库或编写自己的解析器。
-
@OP 检查我的更新答案,尤其是关于
.*?与[^)]*的部分。
标签: java regex pattern-matching