![](/img/trans.png)
[英]Find all occurrences of regex pattern, but ignore occurrences that contain another pattern
[英]Find all occurrences of a regex pattern and replace with eval output
我有一个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())
行, eval(c.lower())
预期输出。 但是, re.sub
行失败并出现以下错误:
raise error, v # invalid expression sre_constants.error: bogus escape (end of line)
不知道我在哪里错了。
您不必使用不同的搜索和替换功能。 您可以使用re.sub
的函数形式调用eval
:
for line in f:
out = re.sub(r'Chr\(\d+\)', lambda c: eval(c.group(0).lower()), line)
print out
您想要转义搜索模式, 因为括号是正则表达式中的特殊字符 。 您可以使用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())
同样的事情,但没有eval()
或导入:
strings = ['Chr(100)', 'Chr(101)', 'Chr(102)']
values = [chr(x) for x in (int(c.replace("Chr(", "").replace(")","")) for c in strings)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.