在python中,如何通过位于花括号外的符号分割字符串?

2024-04-18 13:17:17 发布

您现在位置: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),但显然它也会在大括号内分裂。。。你知道吗

因为这是我第一次使用regex,我怎么才能得到我想要的呢?你知道吗


Tags: re脚本表达式cos大括号regexlatexsplit
2条回答

下面是您可以使用的多个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}"

regex需要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}']

您只需在+上拆分即可

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

相关问题 更多 >