我有一个txt文件,其中包含很多字符串,例如

Chr(101)
Chr(97)
Chr(104)
...


我正在使用以下代码使用正则表达式查找所有此类字符串。我要执行的操作是将每个事件替换为其评估的输出。因此,在这种情况下,我将上述内容替换为:

e
a
h


我的代码如下:

with open(oFile, "r") as f:
    for line in f:
      # find all occurrences of Chr(\d+\) and put in a list
      chrList = [str(s) for s in re.findall(r'Chr\(\d+\)', line)]
      # print chrList
      for c in chrList:
        # print eval(c.lower())
        out = re.sub(c, eval(c.lower()), line)


如果我打印eval(c.lower())行,则它按预期输出。但是re.sub行失败,并显示以下错误:


raise error, v # invalid expression sre_constants.error: bogus escape (end of line)



不知道我在哪里错了。

最佳答案

您想逃避搜索模式because parenthesis are special characters in regular expressions。您可以使用re.escape轻松完成此操作。

out = re.sub(re.escape(c), eval(c.lower()), line)


并举一个例子:

strings = ['Chr(100)', 'Chr(101)', 'Chr(102)']
values = [re.sub(re.escape(c), eval(c.lower()), c) for c in strings]

# ['d', 'e', 'f']


话虽这么说,为什么不只使用replace()

out = line.replace(c, eval(c.lower())

关于python - 查找所有出现的正则表达式模式并替换为eval输出,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36222192/

10-12 22:43