如何在python中使用位于花括号外的符号来分割字符串?

时间:2017-09-25 07:49:25

标签: python

我正在编写一个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),但显然它也会在括号内分裂......

由于这是我第一次使用正则表达式,我怎样才能得到我想要的东西?

2 个答案:

答案 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}']