匹配多个单词

2024-06-14 04:50:47 发布

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

我有以下短语,我想把它们搭配起来:

"De la Sota: Hello" -> "De la Sota"

"Guini: Hello" -> "Guini"

"Prat Gay: Hello" -> "Prat Gay"

我正在使用r"(\w+):",但它只匹配:之前的最后一个单词。你知道吗


Tags: hellode单词lapratsotagayguini
3条回答

str.split(":")[0]应该可以工作,其中str是您要拆分的字符串。你知道吗

>>> str = "De la Sota: Hello" 
>>> str.split(":")[0]
'De la Sota'

其工作原理是将字符串拆分为一个列表,其中参数是分隔符。如果将冒号指定为分隔符,则会将字符串拆分为由冒号分隔的单个短语列表。[0]只是引用列表的第一个值,这是您想要的。你知道吗

只需使用此模式:

/^(.*):/gm

现在$1包含了您需要的内容。你知道吗

Online Demo

注意到我非常确定有一个比regex更好的方法来实现这一点。但我不是Python专家。你知道吗

"Prat Gay: Hello" -> "Prat Gay"

如果这正是您所拥有的,那么您可以使用一个否定集来摆脱: (using \s——或者如果它是一个使用\t)和Helo的制表符,因为它是一个集合。至于名字,一些姓氏包含-,或 we need more than one occurrence of a character (\w)来构成名字:

import re
string = ''' De la Sota: Hello

Guini: Hello

Prat Gay: Hello
'''
print(re.findall(r'[-\w ]+[^:\sHelo]', string))

给出以下答案:

[' De la Sota', 'Guini', 'Prat Gay']

您应该使用re.findall而不是re.match,因为前者查找整个字符串,后者只与第一行匹配,并查看字符串是否以它开头。你知道吗

相关问题 更多 >