gpt4 book ai didi

java - 模式匹配出了什么问题?

转载 作者:行者123 更新时间:2023-12-01 13:19:13 25 4
gpt4 key购买 nike

这个程序应该匹配

(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);
}

谢谢。

最佳答案

我可能错了,但也许你正在寻找类似的东西

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 不能是 ) ([^)] 表示 - 除 )) 之外的所有字符。

关于java - 模式匹配出了什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22181740/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com