我无法将连续的字符串拆分成更合理的部分:
例如'MarieMüller' 应该变成 'Marie Müller'
到目前为止,我已经使用了这个,如果没有出现特殊字符,它就可以工作:
' '.join([a for a in re.split(ur'([A-Z][a-z]+)', ''.join(entity)) if a])
这个输出例如'TinaTurner' -> 'Tina Turner',但不起作用 对于 'MarieMüller',输出:'MarieMüller' -> 'Marie M\utf8 ller'
现在我使用正则表达式\p{L} 来了:
' '.join([a for a in re.split(ur'([\p{Lu}][\p{Ll}]+)', ''.join(entity)) if a])
但这会产生奇怪的东西,比如: 'JenniferLawrence' -> 'Jennifer Lawrence'
谁能帮帮我?
最佳答案
如果您使用 Unicode 并需要使用 Unicode 类别,您应该考虑使用 PyPi regex module .在那里,您可以支持所有 Unicode 类别:
>>> import regex
>>> p = regex.compile(ur'(?<=\p{Ll})(?=\p{Lu})')
>>> test_str = u"Tina Turner\nMarieM\u00FCller\nJacek\u0104cki"
>>> result = p.sub(u" ", test_str)
>>> result
u'Tina Turner\nMarie M\xfcller\nJacek \u0104cki'
^ ^ ^
在这里,(?<=\p{Ll})(?=\p{Lu})
正则表达式查找小写字母 ( \p{Ll}
) 和大写字母 ( \p{Lu}
) 之间的所有位置,然后是 regex.sub
在那里插入一个空格。请注意,正则表达式模块会自动使用 regex.UNICODE
编译正则表达式。标记模式是否为 Unicode 字符串(u
- 前缀)。
关于python - 在 python 中使用正则表达式 re.split 拆分堆叠实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36838894/