使用正则表达式替换python中的子字符串

时间:2014-08-21 10:22:58

标签: python regex

我有一个测试文件,如:

rd20140921
rd20131122 rd20131122
hello?rd20131122
rd20140921
rd20140921

和我的python代码替换任何10个字符长的字符串并以当前日期的rd201开头

filesToSearch=["test.txt"];
textToReplace = "rd"+today.isoformat().replace("-","");
print ("Text to replace: %s" % textToReplace);

for file in filesToSearch:
    for line in fileinput.FileInput(file,inplace=1):
        line = re.sub(r"^rd201[0-9]{5}$", textToReplace, line)
        print(line, end='');

此代码仅替换第1行和第5行而不是第2行和第3行。

1 个答案:

答案 0 :(得分:1)

您的正则表达式与您认为的不完全匹配。 $字符匹配字符串的结尾,因此第1,4,5行是唯一与表达式匹配的行。

对于字符串:rd20131122 rd20131122,您匹配第一个rd20131122,但这不是字符串的结尾,因此匹配失败。

对于字符串:hello?rd20131122,它与您的表达式不匹配,表明该字符串 start rd201。它以hello开头,因此表达式与之匹配。

如果您想要替换包含表达式rd201[0-9]{5}所有出现字符串,那么您所要做的就是删除字符串start(^)和字符串结束($)正则表达式的一部分。