[英]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.