查找所有出现的regex模式并替换为eval outpu

2024-06-16 19:08:36 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

我使用下面的代码使用regex查找所有出现的此类字符串。我想做的是用它的计算输出替换每个事件。因此,在本例中,我将上述内容替换为:

^{pr2}$

我的代码如下:

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)

我不知道我哪里出错了。在


Tags: 文件of字符串代码inretxtfor
3条回答

你不需要使用不同的功能来替换。您可以使用re.sub的函数形式调用eval

for line in f:
  out = re.sub(r'Chr\(\d+\)', lambda c: eval(c.group(0).lower()), line)
  print out

相同的东西,但没有eval()或导入:

strings = ['Chr(100)', 'Chr(101)', 'Chr(102)']
values = [chr(x) for x in (int(c.replace("Chr(", "").replace(")","")) for c in strings)]

你想逃离你的搜索模式because parenthesis are special characters in regular expressions。您可以使用^{}轻松完成此操作。在

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

举个例子:

^{pr2}$

既然如此,为什么不直接使用replace()?在

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

相关问题 更多 >