字符串替换为匹配精确字符串的re子

时间:2016-09-11 04:07:37

标签: python regex

我想在段落的第一行更改字符串foo而不更改另一行。我已经使用模式^和$来匹配像perl那样的确切字符串,但仍然没有运气。求助。

我的代码:

input_file = "foo afooa"
input_file = re.sub(r'^foo$', 'bar', input_file)
print input_file

所以,我期待这样的结果:

bar afooa

提前致谢

3 个答案:

答案 0 :(得分:1)

doc,您可以设置count = 1 re.sub()只更改模式的第一个匹配项。另外,请删除^$,因为您不想搜索仅包含单词foo的整行。示例代码:

import re; 
input_file = "foo afooa"; 
input_file = re.sub(r'foo', 'bar', input_file, count = 1); 
print input_file;

答案 1 :(得分:1)

您的正则表达式目前为r'^foo$',它基本上与字符串“foo”匹配。的

如果您刚刚将其更改为r'^foo',则只要“foo”#39;在字符串的开头找到,但与之前的模式不同,它并不关心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

或者,如果您只想替换第一次出现的完整单词&f 39,那么请使用@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

答案 2 :(得分:0)

而不是^和$,使用\ b来匹配边界。

>>> a="foo afooa"
>>> b= re.sub(r"\bfoo\b",'bar',a)
>>> b
'bar afooa'
>>>