对于这个问题,假设专有名称与此匹配
[A-Z][a-z]+ [A-Z][a-z]+
假设我有一个字符串,它可能会这样结束
sometext Some Name
,在这种情况下,我们希望删除专有名称。
否则可能会这样结束
sometext Another Namevariation
并且也匹配,因此我们移动该专有名称。
否则可能会这样结束
sometext Some Name Another Namevariation
,我们想删除这两个名字。
或者它可能以数字结尾,然后我们不想做任何事情。
如何从字符串末尾截取可变次数的专有名称?
如果您修改正则表达式,以便不再匹配单个专有名称,而是匹配字符串末尾的一个或多个专有名称,如下所示:
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'