python – How to input a regex in string.replace?

python – How to input a regex in string.replace?

This tested snippet should do it:

import re
line = re.sub(r</?[d+>, , line)

Edit: Heres a commented version explaining how it works:

line = re.sub(r
  (?x) # Use free-spacing mode.
  <    # Match a literal <
  /?   # Optionally match a /
  [   # Match a literal [
  d+  # Match one or more digits
  >    # Match a literal >
  , , line)

Regexes are fun! But I would strongly recommend spending an hour or two studying the basics. For starters, you need to learn which characters are special: metacharacters which need to be escaped (i.e. with a backslash placed in front – and the rules are different inside and outside character classes.) There is an excellent online tutorial at: www.regular-expressions.info. The time you spend there will pay for itself many times over. Happy regexing!

str.replace() does fixed replacements. Use re.sub() instead.

python – How to input a regex in string.replace?

I would go like this (regex explained in comments):

import re

# If you need to use the regex more than once it is suggested to compile it.
pattern = re.compile(r</{0,}[d+>)

# </{0,}[d+>
# 
# Match the character “<” literally «<»
# Match the character “/” literally «/{0,}»
#    Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «{0,}»
# Match the character “[” literally «[»
# Match a single digit 0..9 «d+»
#    Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
# Match the character “>” literally «>»

subject = this is a paragraph with<[1> in between</[1> and then there are cases ... where the<[99> number ranges from 1-100</[99>. 
and there are many other lines in the txt files
with<[3> such tags </[3>

result = pattern.sub(, subject)

print(result)

If you want to learn more about regex I recomend to read Regular Expressions Cookbook by Jan Goyvaerts and Steven Levithan.

Leave a Reply

Your email address will not be published. Required fields are marked *