我正在编写一个python脚本来获取cos^n
的线性化。
为了在LaTeX中格式化,我想将获得的表达式拆分为分隔符。
例如我
expr = \frac{1}{32}e^{-5\jmath\theta} + \frac{5}{32}e^{3\jmath\theta} + \frac{5}{16}e^{\jmath\theta} + \frac{5}{16}e^{-\jmath\theta} + \frac{5}{32} e^{-3\jmath\theta} + \frac{1}{32}e^{-5\jmath\theta}
我希望按±\frac{.}{.} e^{.}
分组
我已经尝试了re.split('([\+-])', expr)
,但显然它也会在括号内分裂......
由于这是我第一次使用正则表达式,我怎样才能得到我想要的东西?
答案 0 :(得分:1)
您可以简单地拆分+
expr = '\frac{1}{32}e^{-5\jmath\theta} + \frac{5}{32}e^{3\jmath\theta} +
\frac{5}{16}e^{\jmath\theta} + \frac{5}{16}e^{-\jmath\theta} + \frac{5}{32}
e^{-3\jmath\theta} + \frac{1}{32}e^{-5\jmath\theta}'
com = expr.split(' + ')
print(com)
输出:
['\ x0crac {1} {32} e ^ { - 5 \ jmath \ theta}','\ x0crac {5} {32} e ^ {3 \ jmath \ theta}','\ x0crac {5 } {16} e ^ {\ jmath \ theta}','\ x0crac {5} {16} e ^ { - \ jmath \ theta}','\ x0crac {5} {32} e ^ { - 3 \ jmath \ theta}','\ x0crac {1} {32} e ^ { - 5 \ jmath \ theta}']
<强> Ideone Demo 强>
答案 1 :(得分:1)
以下是您可以使用的多个regexen。
首先,在定义字符串时应注意'\'
:
>>> '\f'
'\x0c'
>>> '\\f'
'\\f'
>>> print('\f')
>>> print('\\f')
\f
所以你可以这样定义text
:
>>> text = "expr = \\frac{1}{32}e^{-5\\jmath\\theta} + \\frac{5}{32}e^{3\\jmath\\theta} + \\frac{5}{16}e^{\\jmath\\theta} + \\frac{5}{16}e^{-\\jmath\\theta} + \\frac{5}{32} e^{-3\\jmath\\theta} + \\frac{1}{32}e^{-5\\jmath\\theta}"
正则表达式需要re
模块:
>>> import re
您只需查找{}
内的所有内容:
>>> re.findall(r'\{.*?\}', text)
['{1}', '{32}', '{-5\\jmath\\theta}', '{5}', '{32}', '{3\\jmath\\theta}', '{5}', '{16}', '{\\jmath\\theta}', '{5}', '{16}', '{-\\jmath\\theta}', '{5}', '{32}', '{-3\\jmath\\theta}', '{1}', '{32}', '{-5\\jmath\\theta}']
如果您不想要{}
:
>>> re.findall(r'(?<=\{).*?(?=\})', text)
['1', '32', '-5\\jmath\\theta', '5', '32', '3\\jmath\\theta', '5', '16', '\\jmath\\theta', '5', '16', '-\\jmath\\theta', '5', '32', '-3\\jmath\\theta', '1', '32', '-5\\jmath\\theta']
如果你想要一个包含3个元素的元组列表:±\frac{.}{.} e^{.}
中的表达式:
>>> re.findall(r'\\frac\{(.*?)}{(.*?)} ?e\^{(.*?)}', text)
[('1', '32', '-5\\jmath\\theta'), ('5', '32', '3\\jmath\\theta'), ('5', '16', '\\jmath\\theta'), ('5', '16', '-\\jmath\\theta'), ('5', '32', '-3\\jmath\\theta'), ('1', '32', '-5\\jmath\\theta')]
如果您想要整个表达式,可能以+
或-
开头:
>>> re.findall(r'[\+\-]? ?\\frac\{.*?}{.*?} ?e\^{.*?}', text)
[' \\frac{1}{32}e^{-5\\jmath\\theta}', '+ \\frac{5}{32}e^{3\\jmath\\theta}', '+ \\frac{5}{16}e^{\\jmath\\theta}', '+ \\frac{5}{16}e^{-\\jmath\\theta}', '+ \\frac{5}{32} e^{-3\\jmath\\theta}', '+ \\frac{1}{32}e^{-5\\jmath\\theta}']