我有一个测试文件,如:
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行。
答案 0 :(得分:1)
您的正则表达式与您认为的不完全匹配。 $
字符匹配字符串的结尾,因此第1,4,5行是唯一与表达式匹配的行。
对于字符串:rd20131122 rd20131122
,您匹配第一个rd20131122
,但这不是字符串的结尾,因此匹配失败。
对于字符串:hello?rd20131122
,它与您的表达式不匹配,表明该字符串 start 与rd201
。它以hello
开头,因此表达式与之匹配。
如果您想要替换包含表达式rd201[0-9]{5}
的所有出现字符串,那么您所要做的就是删除字符串start(^
)和字符串结束($
)正则表达式的一部分。