繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM