python - 在 python 中使用正则表达式 re.split 拆分堆叠实体

标签 python regex nlp

我无法将连续的字符串拆分成更合理的部分:

例如'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/

相关文章:

regex - 正则表达式中的自定义单词边界

javascript - 删除除最后一次以外的所有事件?

python - 在文本文件中创建带有句点(句点)的新行

python - 如何修改线程内的列表?

python - 正则表达式将文本转换为天数失败 - Python 3.10.x

regex - 单个正则表达式中的 bool 逻辑 - 可能吗?

python - 使用正则表达式查找段落中出现特定短语后的所有名词短语

将缩写词提取为其原始词的算法

Python MySQLdb 改变字符串编码

python - 包含 '#' 时文本操作的惊人输出