您的正则表达式当前是r'^foo$',它基本上与字符串“foo”匹配仅。
如果您只是将其更改为 r'^foo',只要在字符串的开头找到“foo”,它就会匹配,但与您之前的模式不同,它不关心 foo 后面的内容。
这是一个例子:
input_file = "foo afooa"
input_file = re.sub(r'^foo', 'bar', input_file)
input_file2 = "foob afooa"
input_file2 = re.sub(r'^foo', 'bar', input_file2)
print input_file
print input_file2
输出:
bar afooa
barb afooa
现在,如果您不想匹配字符串的一部分,而是在行首匹配整个字符串 'foo',那么您需要添加边界 '\b' 匹配,如下所示:
input_file = "foo afooa"
input_file = re.sub(r'^foo\b', 'bar', input_file)
input_file2 = "foob afooa"
input_file2 = re.sub(r'^foo\b', 'bar', input_file2)
print input_file
print input_file2
输出:
bar afooa
foob afooa
或者,如果您只想替换第一次出现的完整单词“foo”,请使用@DineshPundkar 建议的模式,并将替换次数限制为 1,就像刚才提到的 @Tuan333。
因此,在这种情况下,您的代码将如下所示:
input_file = "a foo afooa foo bazfooz"
input_file = re.sub(r'\bfoo\b', 'bar', input_file, 1)
print input_file
输出:
a bar afooa foo bazfooz