我試圖在除第一個大寫字母之前的每個大寫字母前加一個空格。Python正則表達式:將「ThisFileName.txt」轉換爲「This File Name.txt」
這裏是我到目前爲止,輸出我得到:
>>> tex = "ThisFileName.txt"
>>> re.sub('[A-Z].', ' ', tex)
' his ile ame.txt'
我想: 「該文件Name.txt」
(那會,如果我能很好也擺脫.TXT的,但我可以做,在一個單獨的操作)
我試圖在除第一個大寫字母之前的每個大寫字母前加一個空格。Python正則表達式:將「ThisFileName.txt」轉換爲「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'
添加一個反斜槓:應用re.sub( '(即[az])([AZ])',「\\ 1 \\ 2',text)...其中一個被解釋爲轉義序列...來自文檔:除非存在'r'或'R'前綴,否則字符串中的轉義序列根據類似於標準C使用的那些 – bernie 2009-02-05 16:38:30