2015-02-08 67 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

相关问题