【问题标题】:How can I get a single part of the expression in a group?如何在组中获得表达式的单个部分?
【发布时间】:2019-07-28 14:24:49
【问题描述】:

我在 LaTeX 中有一个表达式,我想删除一些东西,我只想保留一部分,它在一个组中指定。 但只删除之前的部分,而不是最后的部分。

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

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{' 并从结尾删除 '}}'

【问题讨论】:

    标签: python regex python-3.x regex-group


    【解决方案1】:

    问题是您的选择组内的.* 与最后的两个} 匹配,并且由于您在} 之外有*,很高兴让它们在选择组内匹配之后就没有了。

    我有两个建议的解决方案,具体取决于您的全部要求:

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

      patron=re.compile(r'\n\{*\\small\{(?P&lt;texto&gt;.*[^}])\}*', re.S)

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

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

      patron=re.compile(r'\n\{*\\small\{(?P&lt;texto&gt;.*?)\}+', re.S)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 2015-04-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多