6

Is there a way of toggling the compilation or use of metacharacters when compiling regexes? The current code looks like this:


Current code:

import re

the_value  = '192.168.1.1'
the_regex  = re.compile(the_value)

my_collection = ['192a168b1c1', '192.168.1.1']

my_collection.find_matching(the_regex)

result = ['192a168b1c1', '192.168.1.1']


The ideal solution would look like:

import re

the_value  = '192.168.1.1'
the_regex  = re.compile(the_value, use_metacharacters=False)

my_collection = ['192a168b1c1', '192.168.1.1']

my_collection.find_matching(the_regex)

result = ['192.168.1.1']

The ideal solution would let the re library handle the disabling of metacharacters, to avoid having to get involved in the process as much as possible.

Charles
  • 50,943
  • 13
  • 104
  • 142
Juan Carlos Coto
  • 11,900
  • 22
  • 62
  • 102
  • 1
    if you're looking for a static string, why do you want to use the re module? Why not just compare strings for equality, or search for a substring? – Bryan Oakley Nov 22 '13 at 02:37

2 Answers2

7

Nope. However:

the_regex  = re.compile(re.escape(the_value))
Ignacio Vazquez-Abrams
  • 776,304
  • 153
  • 1,341
  • 1,358
7

Use the re.escape() function for this.

Return string with all non-alphanumerics backslashed; this is useful if you want to match an arbitrary literal string that may have regular expression metacharacters in it.

>>> import re
>>> re.escape('192.168.1.1')
'192\\.168\\.1\\.1'
hwnd
  • 69,796
  • 4
  • 95
  • 132