使用堆叠正则表达式拆分实体重新分割在python中

2024-10-01 13:41:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我很难将连续的字符串分成更合理的部分:

例如,“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”

现在我使用regex来accros\p{L}:

^{pr2}$

但这会产生一些奇怪的东西,比如: “JenniferLawrence”—>;“Jennifer L awrence”

谁能帮帮我吗?在


Tags: 方法字符串ingtreforifsplit
3条回答

如果您使用Unicode并需要使用Unicode类别,则应该考虑使用PyPi regex module。在这里,您可以支持所有Unicode类别:

^{1}$

在这里,(?<=\p{Ll})(?=\p{Lu})正则表达式查找小写(\p{Ll})和大写(\p{Lu})字母之间的所有位置,然后regex.sub在那里插入一个空格。注意,如果模式是Unicode字符串(u-前缀),regex模块会自动编译带有regex.UNICODE标志的正则表达式。在

它对扩展字符无效

您可以使用re.sub()进行此操作。会简单得多

^{1}$

用于处理空间

^{pr2}$

处理连续大写字母案件

print re.sub(r'(?<=[a-z])(?=[A-Z])', ' ', '   TinaTXYurner'.strip())

Ideone Demo

正则表达式分解

(?= #Lookahead to find all the position of capital letters
 (?!^) #Ignore the first capital letter for substitution
 [A-Z]
)

使用由Python的字符串操作而不是正则表达式构造的函数,应该可以:

^{1}$

相关问题 更多 >