在大写字母前插入空格的Pythonic方法

35 投票
10 回答
41130 浏览
提问于 2025-04-11 09:31

我有一个文件,想通过一个Python脚本来改变它的格式。这个文件里有几个驼峰命名的字符串,我只想在每个大写字母前面加一个空格,比如把“WordWordWord”变成“Word Word Word”。

我对正则表达式的了解不多,现在遇到瓶颈了——有没有人能想到一个好的正则表达式来实现这个,或者(更好的是)有没有更符合Python风格的方法我没想到的?

10 个回答

16

看看我在 .NET - 如何将一个用大写字母分隔的字符串拆分成数组? 上的回答。

编辑:也许在这里包含它会更好。

re.sub(r'([a-z](?=[A-Z])|[A-Z](?=[A-Z][a-z]))', r'\1 ', text)

例如:

"SimpleHTTPServer" => ["Simple", "HTTP", "Server"]
38

如果有连续的大写字母,那么Greg的结果可能不是你想要的,因为\w会把大写字母前面的字符也给消耗掉。

>>> re.sub(r"(\w)([A-Z])", r"\1 \2", "WordWordWWWWWWWord")
'Word Word WW WW WW Word'

使用一个向后查找的方式可以解决这个问题:

>>> re.sub(r"(?<=\w)([A-Z])", r" \1", "WordWordWWWWWWWord")
'Word Word W W W W W W Word'
61

你可以试试:

>>> re.sub(r"(\w)([A-Z])", r"\1 \2", "WordWordWord")
'Word Word Word'

撰写回答