![](/img/trans.png)
[英]How to split a string with capital words without preceding whitespace in python
[英]Split string at capital letter but only if no whitespace
设定
我有一串需要分成列表的名字。
按照这个答案 ,我有,
string = 'KreuzbergLichtenbergNeuköllnPrenzlauer Berg'
re.findall('[A-Z][a-z]*', string)
最后一行给我的地方,
['Kreuzberg', 'Lichtenberg', 'Neuk', 'Prenzlauer', 'Berg']
问题
1)忽略空格
'Prenzlauer Berg'实际上是1个名字,但代码按照“按首都分割”的规则进行分割。
如果前面的字符是空格,那么确保它不以大写字母分割的命令是什么?
2)特殊字符处理不好
使用的代码无法处理'ö'
。 我如何包含这样的“德国”字符?
即我想获得,
['Kreuzberg', 'Lichtenberg', 'Neukölln', 'Prenzlauer Berg']
您可以使用正面和负面的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结果
这有效
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']
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.