2015-03-03 98 views
2

我已經看過this question,雖然答案解決了OP的問題,但實際上並未回答問題。當只有相關部分之前和之後的模式已知時,如何才能提取給定字符串的一部分?僅提取兩個正則表達式模式之間的字符串部分

例如,如果我有一個像這樣的字符串:

"Hi, this is a string where only values = { 000.10, 2.00, 5.0, 10.0 } are important

並給予這個字符串我需要專門000.10, 2.00, 5.0, 10.0提取。我不知道會有多少號碼或他們的格式,或者他們之間有多少空間,但我知道values = {}將在開始和結束。

使用正則表達式,我可以做找到values = { 000.10, 2.00, 5.0, 10.0 }

import re 

string = "Hi, this is a string where only values = { 000.10, 2.00, 5.0, 10.0 } are important" 

match = re.search(r'values\s=\s\{.+}\s', string) 
if match: 
    print match.group() 
else: 
    print "Could not find a match..." 

,輸出:

values = { 000.10, 2.00, 5.0, 10.0 }

所以,我怎麼能得到的只有模式r'values\s=\s\{\}\s之間的文本?

我知道,我可能只是空字符串替換起點和終點的模式是這樣的:

match.group().replace('values = { ', '').replace(' } ', '')

,但有沒有納入,我只希望在兩種模式之間的結果的事實的方式正則表達式本身?

希望這個問題有道理。任何答案將不勝感激。

回答

4

你只需要組你想要的文字,像這樣

re.search(r'values\s=\s{\s*(.+)\s*}\s', string) 

注意括號內{}。在這裏,我們使用\s*來匹配您想要匹配的實際文本週圍的0個或多個空白字符。由於捕獲組不包含\s*,所以空格將不匹配。然後你會得到的分組值這樣

print match.group(1) 

當你這樣做match.group(),或match.group(0)它會給整個匹配的字符串。由於我們只需要與組匹配的文本,因此我們指定組的編號。您可以在Match object's group文檔中閱讀有關它的更多信息。

+1

根據OP的問題,您需要花括號之間的捕獲組= = – hwnd 2015-03-03 03:35:26

+1

+1:非常簡單的解釋。對於OP來說,parens也可以放置在轉義括號內,即。 '\ {',與您的原始字符串類似,只能獲取*括號內的數字。 – Manhattan 2015-03-03 03:35:38

+0

@hwnd哎呀,謝謝你通知:-) – thefourtheye 2015-03-03 03:37:11

相關問題