我真的不明白regex是如何在球拍中工作的。如果我们有下面的代码
(regexp-replace #px"\\((.*)\\)\\/\\((.*)\\)"
"(A + B)/(C)"
"\\\\dfrac\\{\\1\\}\\{\\2\\}")预期的结果应该是\dfrac{A + B}{C}。同样的工作原理是正确的,例如在python中。尽管如此,我还是得到了\dfrac(A + B)/(C){A + B(A + B)/(C)}(A + B)/(C){C(A + B)/(C)}。我甚至能感觉到这背后的一些逻辑。也许情况是match的行为,因为当应用到这个正则表达式和字符串时,regexp-match返回三个元素的列表:'("(A + B)/(C)" "A + B" "C")。或者我应该用某物代替regex-replace
我怎样才能实现我想要的,更重要的是,如何理解racket正则表达式背后的逻辑,而不推敲所有的文档?
发布于 2021-01-29 20:26:48
问题是替换字符串中的\\{。{不需要在替换中转义,只需要在正则表达式中转义。文件上说:
如果insert中的
\后面跟着一个数字、&、\或$以外的任何东西,那么\本身就被视为\0。
因此,每个\\{被替换为整个匹配。
正确的呼叫是
(regexp-replace #px"\\((.*)\\)\\/\\((.*)\\)"
"(A + B)/(C)"
"\\\\dfrac{\\1}{\\2}")请参阅演示
https://stackoverflow.com/questions/65960883
复制相似问题