我有一个字符串,例如" 31.5 * q * L ^ 2 + 831.5 * M"。我希望将字符串转换为" \ num {31.5} q L ^ 2 + \ num {831.5} * M"。
在朱莉娅,我已经尝试过:
str="31.5*q*L^2+831.5*M";
temp1=matchall(r"(\d*\.?\d+|\d+\.?\d*)",str);
str1=replace(str,temp1[1],"\\num\{"*temp1[1]*"\}");
然后我得到了意想不到的结果:" \ num {31.5} q L ^ 2 + 8 \ num {31.5} * M"。
这个问题的解决方案是什么?
谢谢
答案 0 :(得分:2)
replace(str,r"(\d*\.?\d+|\d+\.?\d*)",s->"\\num\{$s\}")
可能是必需的解决方案。虽然它确实替换了L^2
中的指数2。为避免这种替换,需要更改模式。
有关更多信息,请在Julia提示符(REPL)上尝试?replace
。上面的具体方法对Function
参数使用r
类型。
可能replace
对于简单的解决方案而言不够灵活,然后循环可以遍历每个数字并单独替换它。这更棘手。请尝试以下代码:
str="31.5*q*L^2+831.5*M"
# The SLOW but more FLEXIBLE way
str1 = ""
lastpos = 1
for m in eachmatch(r"(?:^|[\+\*])(\d*\.?\d+|\d+\.?\d*)",str,false)
str1=str1*str[lastpos:m.captures[1].offset]*"\\num\{"*m.captures[1]*"\}"
lastpos = m.captures[1].endof+m.captures[1].offset+1
end
str1 = str1*str[lastpos:end]
以上使用eachmatch
和SubString
类型的内部。有时候进入细节是不可避免的。