使用regex findall函数从字符串中查找单词,但必须使用utf-8编码



我必须从一个以大写字母开头并后跟至少一个小写字母的字符串中返回所有单词,但我的问题是我必须使用UTF-8编码,但我不知道如何将其添加到代码中。

例如,我有一个字符串:

'KanaMunaPelmeen!!ApelsinÕunMandariinKakaoHernesAhven'

我应该返回:

['Kana', 'Muna', 'Pelmeen', 'Apelsin', 'Õun', 'Mandariin', 'Kakao', 'Hernes', 'Ahven']

到目前为止,我的代码是:

def find_words(text: str) -> list:
pattern = r"[A-Z]+[a-z]*"
match = re.findall(pattern, text)
return match

所以我的结果是:

['Kana', 'Muna', 'Pelmeen', 'Apelsin', 'Mandariin', 'Kakao', 'Hernes', 'Ahven']

如何在代码中写入还要考虑UTF-8编码?

您可以安装PyPi regex模块并使用

import regex
text = 'KanaMunaPelmeen!!ApelsinÕunMandariinKakaoHernesAhven'
pattern = regex.compile(r'p{Lu}p{Ll}*')
print( pattern.findall(text) )
# => ['Kana', 'Muna', 'Pelmeen', 'Apelsin', 'Õun', 'Mandariin', 'Kakao', 'Hernes', 'Ahven']

请在线查看Python演示。

如果你不能安装PyPi正则表达式模块,你可以使用

import re, sys
text = 'KanaMunaPelmeen!!ApelsinÕunMandariinKakaoHernesAhven'
pLu = '[{}]'.format("".join([chr(i) for i in range(sys.maxunicode) if chr(i).isupper()]))
pLl = '[{}]'.format("".join([chr(i) for i in range(sys.maxunicode) if chr(i).islower()]))
pattern = re.compile(fr'{pLu}{pLl}*')
print( pattern.findall(text) )
# => ['Kana', 'Muna', 'Pelmeen', 'Apelsin', 'Õun', 'Mandariin', 'Kakao', 'Hernes', 'Ahven']

请参阅此Python演示。

最新更新