设置向上
我有一串需要分成列表的名字。
关注this answer,我有,
string = 'KreuzbergLichtenbergNeuköllnPrenzlauer Berg'
re.findall('[A-Z][a-z]*', string)
最后一行给我的地方,
['Kreuzberg', 'Lichtenberg', 'Neuk', 'Prenzlauer', 'Berg']
问题
1)忽略空格
' Prenzlauer Berg'实际上是1个名称,但代码根据' split-at-capital-letter'进行拆分。规则。
如果前面的字符是空格,那么确保不以大写字母分割的命令是什么?
2)特殊字符处理不当
使用的代码无法处理'ö'
。我如何包含这样的德语'字符?
即。我想获得,
['Kreuzberg', 'Lichtenberg', 'Neukölln', 'Prenzlauer Berg']
答案 0 :(得分:3)
您可以使用正面和负面的lookbehind,只需明确列出变音符号:
>>> string = 'KreuzbergLichtenbergNeuköllnPrenzlauer Berg'
>>> re.findall('(?<!\s)[A-ZÄÖÜ](?:[a-zäöüß\s]|(?<=\s)[A-ZÄÖÜ])*', string)
['Kreuzberg', 'Lichtenberg', 'Neukölln', 'Prenzlauer Berg']
(?<!\s)...
:匹配...
之前没有的\s
(?<=\s)...
:匹配前面有...
\s
(?:...)
:非捕获组,以免弄乱findall结果
答案 1 :(得分:0)
这有效
string="KreuzbergLichtenbergNeuköllnPrenzlauer Berg"
pattern="[A-Z][a-ü]+\s[A-Z][a-ü]+|[A-Z][a-ü]+"
re.findall(pattern, string)
#>>>['Kreuzberg', 'Lichtenberg', 'Neukölln', 'Prenzlauer Berg']