2011-02-02 50 views
1

如何查找字符串中的值,將特定值添加到每個字符串中並用固定字符串替換輸出。如何查找字符串中的值,操作並替換它們

import re 
def _replace(content): 
    #x = float(content.group(4))+20 
    #y = float(content.group(6))+20 
    return content.group(6) 
print re.sub('<g(\s)transform="matrix\((.*)(\s)(.*)(\s)(.*)\)\"', _replace, '<g transform="matrix(0.412445 -0.0982513 0.0982513 0.412445 -5.77618 67.0025)">') 
+0

如果縮進了4位代碼,將很好地格式化。 – 2011-02-02 17:41:41

+0

如果我們能看到你已經嘗試過的東西,那將會很有幫助。你提到你的代碼被「剝離」了......你可以使用代碼片段(花括號圖標)格式化工具來添加一段代碼。只需複製粘貼,突出顯示代碼塊,然後按大括號圖標即可。 (它只是將代碼片段縮進4個空格,這是stackoverflow用於指示代碼塊的內容)。 – 2011-02-02 17:41:44

回答

1

首先,我應該重複關於不使用正則表達式來解析XML的常見警告。這是一個壞主意,它會從來沒有工作的所有情況下。如果你實際上試圖解析完整的xml文檔,use an XML parser

話雖如此,我有罪做這樣的快速和骯髒的東西,所有的時間。如果你真的只需要一次性解決方案,一個簡單的正則表達式通常可以完成工作。請注意,只要遇到更復雜的事情,它就會一直困擾着你!

接下來,我承認我不是太大的正則表達式的行家,但這裏就是我想修改您的代碼段:

import re 

def _replace(content): 
    values = [float(val) for val in content.group(2).split()] 
    values[3] += 20 
    values[5] += 100 
    values = ['{0}'.format(val) for val in values] 
    return content.group(1) + ' '.join(values) + content.group(3) 

test_string = '<g transform="matrix(0.412445 -0.0982513 0.0982513 0.412445 -5.77618 67.0025)">' 
pattern = r'(transform=\"matrix\()(.*?)(\))' 
print test_string 
print re.sub(pattern, _replace, test_string)