2016-06-15 62 views
0

我最不善於用正則表達式模式,我正在寫一個需要文件的分割線到「內容」部分和「標籤」部分簡單的Python程序,然後再將標籤部分分割成單獨的標籤。以下是對我的文件的一個行可能看起來像一個簡單的例子:需要幫助找到正確的正則表達式模式爲我的字符串模式

The Beatles <music,rock,60s,70s>

我打開我的文件,開始念臺詞是這樣的:

def Load(self, filename): 
    file = open(filename, r) 

    for line in file: 
     #Ignore comments and empty lines.. 
     if not line.startswith('#') and not line.strip(): 
     #... 

原諒我可能可怕的Python,這是我語言的第一天。無論如何,接下來我認爲使用正則表達式將我的字符串分割爲多個部分會很有用 - 包含一個用於存儲「內容」的變量(例如「The Beatles」)和一個用於存儲每個字符串的列表/標籤。因此,我需要一個正則表達式(或兩個?),可以:

  • 拆分原料部分來自<>部分。

  • 和分裂的標籤部分插入基於逗號的列表。

  • 最後,我要確保內容部分保留其資本和內部間隔。但是我想確保標籤都是小寫的,沒有空白。

我想知道是否有任何正則表達式專家可以幫助我在這裏找到正確的模式來實現我的目標?

+1

不是一個RE專家,但這樣的事情似乎是你以後在做什麼:「([^ <]*)<([^>] *)>」如果你使用帶()對刪除行的每一端的空白。 這應該與像你的榜樣字符串包含一切左邊的第一個「<」字符的兩組(即「披頭士」),一切都包含在‘<' and '>’字符之間(即‘音樂,搖滾樂,60年代,70年代’) 。 – Wuggy

回答

1

這是一個解決方案,可以在不依賴多個拆分的情況下解決問題。

# This separates the string into the content and the remainder 
content, tagStr = line.split('<') 

# This splits the tagStr into individual tags. [:-1] is used to remove trailing '>' 
tags = tagStr[:-1].split(',') 

print content 
print tags 

問題在於它在內容後面留下了尾隨的空白。 您可以刪除此:

content = content[:-1] 
+2

可以使用多焦分裂分離器是這樣的: '內容,tagStr = line.split(「<」)' 在這種情況下後帶名稱後空間被視爲隔膜的一個組成部分,不會污染數據。當然,這裏假設這裏沒有使用空間以外的字符(這是相當合理的)。 – Synedraacus