I know that re.sub(pattern, repl,text)
can substitute when pattern matches, and then return the substitute.
My code is:
text = re.sub(pattern, repl, text1)
I have to define another variable to check whether it is modified:
text2 = re.sub(pattern, repl, text1)
matches = text2 != text1
text1 = text2
It has issues, for example with: text1='abc123def'
, pattern = '(123|456)'
, repl = '123'
.
After replacement, it is the same string, so matches
is false, but it actually matches.
Use re.subn
Perform the same operation as sub(), but return a tuple (new_string, number_of_subs_made).
and then check the number of replacements that were made. For example:
text2, numReplacements = re.subn(pattern, repl, text1)
if numReplacements:
# did match
else:
# did not match
The repl
parameter can also be a function which takes an RE match object and returns what the replacement should be; this function is not called if the text doesn't match. You could use that to do what you needed then just return a constant string you want to replace it with. This would cut down on an unneeded second check against the RE.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With