如何将变量指定为中的第一个参数re.sub公司

2024-09-25 10:21:54 发布

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

我最近才开始使用python,以前从未编写过任何代码。我使用了正则表达式来匹配输入文件中的字符串(这是成功的),但是我真的很难找到一种方法来用另一个使用正则表达式的字符串替换该文件中的字符串。在

with open( fileToSearch, "r+" ) as file:
for line in fileinput.input( fileToSearch ):
    string4=line
    result1 = re.search(r'(KNOWLEDGECENTER\/.*?\/)' + re.escape(taxonomy), string4)
    print (result1)
    result2 = re.sub(result1, r'(KNOWLEDGECENTER\/\t(\1)\/\)' + taxonomy, string4)
    print (result2)
    file.write(result2)  

我预料到了re.sub公司将用替换字符串替换result1变量中的字符串,但我得到以下错误:

raise TypeError,“第一个参数必须是字符串或已编译模式” TypeError:第一个参数必须是string或compiled pattern

如果我在re.sub公司语句,如下所示,我没有得到错误,但是输入文件没有用替换字符串更新

^{pr2}$

在搜索代码似乎与print(result1)返回的结果相同:<_sre.sre_匹配对象位于0x02A120E0>;处,以获取输入文件中的每一行


Tags: 文件字符串代码re错误line公司file
2条回答

search返回一个对象(MatchObject),该对象具有与regex匹配相关的各种属性,而不是字符串或编译模式,因此会出现错误。也许你想要的是re.sub(results1.group(0), ...)

(顺便说一下,您的关键字是python2.7。如果您使用的是这个版本,请考虑升级到python3)

由于re.sub本身可以执行搜索,因此不需要单独调用re.search。实际上,在结果匹配中,您将丢失regex中用于调用re.search的捕获组,因此对re.sub的调用中替换字符串中的反向引用将不能引用任何内容。合并到两个调用,它就可以工作了(下面的示例代码假设您只想在KNOWLEDGECENTER/之后添加一个制表符:

for line in fileinput.input(fileToSearch):
    result = re.sub('(KNOWLEDGECENTER/)(.*?/' + re.escape(taxonomy) + ')', r'\1\t\2', line)
    file.write(result)

相关问题 更多 >