2015-02-08 69 views
1

我想從變量中處理用戶輸入的正則表達式。很多搜索後,我想出了以下內容:代碼變量的如何在python正則表達式中使用變量?

釋:

step是用作輸入的正則表達式

例如串

替換| - |空間,

更換| * |空,

替代|/| \ | squot |空間

b is a list元素。元素是根據正則表達式獲取和修改的。

i is integer從其他功能接收到訪問表b利用i作爲索引

予處理上面的字符串以獲得陣列,然後用數組的最後一個元素作爲替換字符串

第一元素被刪除因爲它不是必需的。 所有其他元素需要替換字符串替換。

def replacer(step,i,b): 
    steparray = step.split('|') 
    del steparray[0] 
    final = steparray.pop() 

    if final == "space": 
     subst = u" " 
    elif final == "squot": 
     subst = u"'" 
    elif final == "dquot": 
     subst = u"\"" 
    else: 
     subst = u"%s"%final 

    for input in xrange(0,len(steparray)): 
     test=steparray[input] 
     regex = re.compile(ur'%s'%test) 
     b[i] = re.sub(regex, subst, b[i]) 
    print b[i] 

然而,當我運行上面的代碼,顯示了以下錯誤:

File "CSV_process.py", line 78, in processor 
    replacer(step,i,b) 
    File "CSV_process.py", line 115, in replacer 
    regex = re.compile(ur'%s'%test) 
    File "/usr/lib/python2.7/re.py", line 190, in compile 
    return _compile(pattern, flags) 
    File "/usr/lib/python2.7/re.py", line 242, in _compile 
    raise error, v # invalid expression 
sre_constants.error: nothing to repeat 

我嘗試了很多,但不知道如何正則表達式的作品。請幫助錯誤。

最後一個要求是從用戶輸入獲得一個特殊字符與其他字符(再次從用戶輸入)

PS替換:此外,代碼沒有242線,但誤差在線242.數組在for循環結束後發生錯誤嗎?

+0

或許''測試''開始於'*'。 – Maroun 2015-02-08 09:31:45

+0

你是以'*'開頭的意思?我沒有允許'*'作爲輸入,但b [i]可能包含'*' – AJINKYA 2015-02-08 09:37:13

回答

3

一些特殊字符如*應該轉義爲符合字面意思。

>>> import re 
>>> re.compile('*') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python27\lib\re.py", line 194, in compile 
    return _compile(pattern, flags) 
    File "C:\Python27\lib\re.py", line 251, in _compile 
    raise error, v # invalid expression 
sre_constants.error: nothing to repeat 

使用re.escape,你能逃脫他們:

>>> print(re.escape('*')) 
\* 
>>> re.compile(re.escape('*')) 
<_sre.SRE_Pattern object at 0x000000000273DF10> 

順便說一句,如果你想簡單地替換他們,正則表達式是沒有必要的。你爲什麼不使用str.replace

replaced_string = string_object.replace(old, new) 
+0

'str.replace'是否會替換所有出現的特定字符?對不起,愚蠢的問題,只是開始在python編碼。 – AJINKYA 2015-02-08 09:39:51

+1

@AJINKYA,是的。您可以控制將會發生多少更換。嘗試'123123'.replace('2','。')'和''123123'.replace('2','。',1)'。 – falsetru 2015-02-08 09:40:45

相關問題