簡體   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