48

I want to replace just the first occurrence of a regular expression in a string. Is there a convenient way to do this?

Cleb
  • 22,913
  • 18
  • 103
  • 140
girish
  • 481
  • 1
  • 4
  • 3

2 Answers2

68

re.sub() has a count parameter that indicates how many substitutions to perform. You can just set that to 1:

>>> s = "foo foo foofoo foo"
>>> re.sub("foo", "bar", s, 1)
'bar foo foofoo foo'
>>> s = "baz baz foo baz foo baz"
>>> re.sub("foo", "bar", s, 1)
'baz baz bar baz foo baz'

Edit: And a version with a compiled SRE object:

>>> s = "baz baz foo baz foo baz"
>>> r = re.compile("foo")
>>> r.sub("bar", s, 1)
'baz baz bar baz foo baz'
eldarerathis
  • 34,279
  • 10
  • 88
  • 93
17

Specify the count argument in re.sub(pattern, repl, string[, count, flags])

The optional argument count is the maximum number of pattern occurrences to be replaced; count must be a non-negative integer. If omitted or zero, all occurrences will be replaced.

Nick T
  • 24,120
  • 11
  • 77
  • 117