2009-02-05 50 views

回答

9
這裏

關鍵概念是反向引用在正則表達式:

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') 
2
re.sub('([a-z])([A-Z])', '\\1 \\2', 'TheFileName.txt') 

編輯:StackOverflow上吃些\ S,在不‘代碼模式’......因爲我忘了在上面的代碼之後添加一個換行符,它不會在'代碼模式'中解釋: - ((。由於我在這裏添加了文本,因此我不必更改任何內容,現在它是正確的。

+0

添加一個反斜槓:應用re.sub( '(即[az])([AZ])',「\\ 1 \\ 2',text)...其中一個被解釋爲轉義序列...來自文檔:除非存在'r'或'R'前綴,否則字符串中的轉義序列根據類似於標準C使用的那些 – bernie 2009-02-05 16:38:30

2

另一種可能的正則表達式使用的外觀背後:

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

目前尚不清楚你想要做的,如果文件名是什麼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'