如何在组中获得表达式的单个部分?

2022-10-02 01:18:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用乳胶做的表达式,我想去掉一些东西,我只想保留一个部分,在一个组中指定。 但只删除之前的部分,而不是最后的部分。你知道吗

我试着把它分成两组,第一组是我感兴趣要保留的那一组,但即使如此,应该留在第二组的部分仍然留在第二组。你知道吗

Python

>>> import re
>>> a='\n{\\small{ Sean $x,y∈R$  y  evaluemos las potencias de  $(x+y)$:\n\n$(x+y)^0=1=1\n(x+y)^1=(x+y)=x+y\n\n(x+y)^2=(x+y)·(x+y)=x^2+2xy+y^2\n\n(x+y)^3=(x+y)·(x+y)^2=x^3+3x^2y+3xy^2+y^3\n\n(x+y)^4=(x+y)·(x+y)^3=\nx^4+4x^3y+6x^2y^2+4xy^3+y^4\n\n(x+y)^5=(x+y)·(x+y)^4=\nx^5+5x^4y+10x^3y^2+10x^2y^3+5xy^4+y^5$\n  }}'
>>> patron=re.compile(r'\n\{*\\small\{(?P<texto>.*)\}*', re.S)
>>> patron.findall(a)
[' Sean $x,y∈R$  y  evaluemos las potencias de  $(x+y)$:\n\n$(x+y)^0=1=1\n(x+y)^1=(x+y)=x+y\n\n(x+y)^2=(x+y)·(x+y)=x^2+2xy+y^2\n\n(x+y)^3=(x+y)·(x+y)^2=x^3+3x^2y+3xy^2+y^3\n\n(x+y)^4=(x+y)·(x+y)^3=\nx^4+4x^3y+6x^2y^2+4xy^3+y^4\n\n(x+y)^5=(x+y)·(x+y)^4=\nx^5+5x^4y+10x^3y^2+10x^2y^3+5xy^4+y^5$\n  }}']

我试过:

>>> patron=re.compile(r'\n\{*\\small\{(?P<texto>.*)(?P<llave>\}*)', re.S)
>>> patron.findall(a)
[(' Sean $x,y∈R$  y  evaluemos las potencias de  $(x+y)$:\n\n$(x+y)^0=1=1\n(x+y)^1=(x+y)=x+y\n\n(x+y)^2=(x+y)·(x+y)=x^2+2xy+y^2\n\n(x+y)^3=(x+y)·(x+y)^2=x^3+3x^2y+3xy^2+y^3\n\n(x+y)^4=(x+y)·(x+y)^3=\nx^4+4x^3y+6x^2y^2+4xy^3+y^4\n\n(x+y)^5=(x+y)·(x+y)^4=\nx^5+5x^4y+10x^3y^2+10x^2y^3+5xy^4+y^5$\n  }}', '')]

在本例中,我希望在元组的第二个元素中得到'}}'。你知道吗

我想得到:

[' Sean $x,y∈R$  y  evaluemos las potencias de  $(x+y)$:\n\n$(x+y)^0=1=1\n(x+y)^1=(x+y)=x+y\n\n(x+y)^2=(x+y)·(x+y)=x^2+2xy+y^2\n\n(x+y)^3=(x+y)·(x+y)^2=x^3+3x^2y+3xy^2+y^3\n\n(x+y)^4=(x+y)·(x+y)^3=\nx^4+4x^3y+6x^2y^2+4xy^3+y^4\n\n(x+y)^5=(x+y)·(x+y)^4=\nx^5+5x^4y+10x^3y^2+10x^2y^3+5xy^4+y^5$\n  ']

我的意思是,我想从开头去掉'\n{\small{',从结尾去掉'}}'


Tags: re表达式delas感兴趣乳胶smallnxcompileseanpatrontextofindallpotenciasevaluemos
1条回答
网友
1楼 ·

问题是,您的选择组中的.*与最后的两个}匹配,并且由于您在}之外有*,所以很高兴让它们在选择组中匹配,之后没有。你知道吗

根据您的全部要求,我有两个建议的解决方案:

  • 您可以强制匹配组以}以外的字符结束,并使用`[^}]:

    patron=re.compile(r'\n\{*\\small\{(?P<texto>.*[^}])\}*', re.S)

    如果您的字符串总是以这些}结尾,那么这将起作用,但如果后面有任何内容,则不起作用。

  • 如果您知道要保留的部分中没有},请使.*不贪婪(使用.*?),并在末尾请求1个或多个},而不是0个或多个,使用\}+

    patron=re.compile(r'\n\{*\\small\{(?P<texto>.*?)\}+', re.S)