我正在尝试从变量处理正则表达式中的用户输入。经过大量的搜索后,我想出了以下内容:
解释代码变量:
step
是用作正则表达式输入的字符串
e.g。
替换| - |空格,
替换| * |空,
替换| / | \ | 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 :(得分: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)