在 Python 中,如何从字符串末尾删除可变数量的 RegEx 模式出现次数?

问题描述 投票:0回答:1

对于这个问题,假设专有名称与此匹配

[A-Z][a-z]+ [A-Z][a-z]+

假设我有一个字符串,它可能会这样结束

sometext  Some Name
,在这种情况下,我们希望删除专有名称。

否则可能会这样结束

sometext Another Namevariation 
并且也匹配,因此我们移动该专有名称。

否则可能会这样结束

sometext Some Name Another Namevariation
,我们想删除这两个名字。 或者它可能以数字结尾,然后我们不想做任何事情。

如何从字符串末尾截取可变次数的专有名称?

python regex
1个回答
0
投票

如果您修改正则表达式,以便不再匹配单个专有名称,而是匹配字符串末尾的一个或多个专有名称,如下所示:

re_proper_name = re.compile(r"([A-Z][a-z]+ [A-Z][a-z]+ ?)+$")

然后你可以简单地去掉字符串中匹配的部分:

def strip_proper_names(text: str) -> str:
    if mo := re_proper_name.search(text):
        start, end = mo.span()
        text = (text[:start] + text[end:]).rstrip()
    return text

使用示例:

>>> strip_proper_names('sometext Some Name')
'sometext'
>>> strip_proper_names('sometext Some Name Another Namevariation')
'sometext'
© www.soinside.com 2019 - 2024. All rights reserved.