在大写字母前插入空格的Pythonic方法
我有一个文件,想通过一个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'