繁体   English   中英

Python正则表达式:将“ThisFileName.txt”转换为“This File Name.txt”

[英]Python regex: Turn “ThisFileName.txt” into “This File Name.txt”

我试图在每个大写字母之前添加一个空格,除了第一个大写字母。

这是我到目前为止所拥有的,以及我得到的输出:

>>> tex = "ThisFileName.txt"
>>> re.sub('[A-Z].', ' ', tex)
' his ile ame.txt'

我想:'这个文件Name.txt'

(如果我还能摆脱.txt,那会很好,但我可以在单独的操作中做到这一点。)

这里的关键概念是正则表达式中的反向引用:

import re
text = "ThisFileName.txt"
print re.sub('([a-z])([A-Z])', r'\1 \2', text)
# Prints: "This File Name.txt"

为了以可靠的方式提取'.txt',我建议使用os.path.splitext()

import os
filename = "ThisFileName.txt"
print os.path.splitext(filename)
# Prints: ('ThisFileName', '.txt')
re.sub('([a-z])([A-Z])', '\\1 \\2', 'TheFileName.txt')

编辑:StackOverflow吃了一些\\ s,当不在'代码模式'时...因为我忘记在上面的代码后添加换行符,它没有在'代码模式'中解释: - ((。因为我在这里添加了该文本我没有必要改变任何东西,现在它是正确的。

使用后面的另一个可能的正则表达式:

(?<!^)([A-Z])

如果文件名是Hello123There.txt ,则不清楚您想要做什么。 因此,如果您想要所有大写字母前的空格而不管它们之前的位置,您可以:

import re

def add_space_before_caps(text):
    "Add a space before all caps except at start of text"
    return re.sub(r"(?<!^)(?=[A-Z])", " ", text)

>>> add_space_before_caps("Hello123ThereIBM.txt")
'Hello123 There I B M.txt'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM