正则表达式仅替换组
Regex replace only groups
我真的不明白正则表达式在球拍中是如何工作的。
前提是我们有下面的代码
(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)}
。我什至能感觉到这背后的一些逻辑。也许情况是匹配的行为方式,因为 regexp-match
returns 应用于此正则表达式和字符串时的三个元素列表:'("(A + B)/(C)" "A + B" "C")
。或者也许我应该使用 sth 而不是 regex-replace
?
我怎样才能实现我想要的,更重要的是,如何在不阅读所有文档的情况下理解球拍正则表达式背后的逻辑?
问题是替换字符串中的 \{
。 {
不需要在替换中转义,只需要在正则表达式中。文档说:
If a \
in insert is followed by anything other than a digit, &
, \
, or $
, then the \
by itself is treated as [=18=]
.
所以每个 \{
都会被整个匹配替换。
正确的叫法是
(regexp-replace #px"\((.*)\)\/\((.*)\)"
"(A + B)/(C)"
"\\dfrac{\1}{\2}")
见DEMO
我真的不明白正则表达式在球拍中是如何工作的。 前提是我们有下面的代码
(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)}
。我什至能感觉到这背后的一些逻辑。也许情况是匹配的行为方式,因为 regexp-match
returns 应用于此正则表达式和字符串时的三个元素列表:'("(A + B)/(C)" "A + B" "C")
。或者也许我应该使用 sth 而不是 regex-replace
?
我怎样才能实现我想要的,更重要的是,如何在不阅读所有文档的情况下理解球拍正则表达式背后的逻辑?
问题是替换字符串中的 \{
。 {
不需要在替换中转义,只需要在正则表达式中。文档说:
If a
\
in insert is followed by anything other than a digit,&
,\
, or$
, then the\
by itself is treated as[=18=]
.
所以每个 \{
都会被整个匹配替换。
正确的叫法是
(regexp-replace #px"\((.*)\)\/\((.*)\)"
"(A + B)/(C)"
"\\dfrac{\1}{\2}")
见DEMO