以大写字母分割字符串,但仅限于没有空格

时间:2017-11-27 10:41:00

标签: python string split whitespace

设置向上

我有一串需要分成列表的名字。

关注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']

2 个答案:

答案 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']