gpt4 book ai didi

parsing - 匹配字符串中的括号

转载 作者:行者123 更新时间:2023-12-02 06:30:23 26 4
gpt4 key购买 nike

匹配字符串中括号的最有效或最优雅的方法是什么,例如:

"f @ g[h[[i[[j[2], k[[1, m[[1, n[2]]]]]]]]]] // z"

为了用单字符形式识别和替换[[ Part ]]括号?

我想要得到:

enter image description here

其他所有内容都完好无损,例如前缀 @ 和后缀 // 形式完好无损

<小时/>

为不熟悉的人提供 Mathematica 语法的解释:

函数使用单方括号作为参数:func[1, 2, 3]

部分索引通过双方括号完成:list[[6]] 或使用单字符 Unicode 双括号:list〚6〛

我的目的是识别 ASCII 文本字符串中匹配的 [[ ]] 形式,并将其替换为 Unicode 字符 〚 〛

最佳答案

好的,这是另一个答案,稍微短一点:

Clear[replaceDoubleBrackets];
replaceDoubleBrackets[str_String, openSym_String, closeSym_String] :=
Module[{n = 0},
Apply[StringJoin,
Characters[str] /. {"[" :> {"[", ++n},
"]" :> {"]", n--}} //. {left___, {"[", m_}, {"[", mp1_},
middle___, {"]", mp1_}, {"]", m_}, right___} /;
mp1 == m + 1 :> {left, openSym, middle,
closeSym, right} /. {br : "[" | "]", _Integer} :> br]]

示例:

In[100]:= replaceDoubleBrackets["f[g[h[[i[[j[2], k[[1, m[[1, n[2]]]]]]]]]]]", "(", ")"]

Out[100]= "f[g[h(i(j[2], k(1, m(1, n[2]))))]]"

编辑

如果您想用您指定的符号专门替换双括号,您还可以使用 Mathematica 内置工具:

Clear[replaceDoubleBracketsAlt];
replaceDoubleBracketsAlt[str_String] :=
StringJoin @@ Cases[ToBoxes@ToExpression[str, InputForm, HoldForm],
_String, Infinity]

In[117]:= replaceDoubleBracketsAlt["f[g[h[[i[[j[2], k[[1, m[[1, n[2]]]]]]]]]]]"]

Out[117]= f[g[h[[i[[j[2],k[[1,m[[1,n[2]]]]]]]]]]]

结果不会在此处正确显示,但它是一个带有您请求的符号的 Unicode 字符串。

关于parsing - 匹配字符串中的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5776158/

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