On 17/04/2013 00:45, Victor Hooi wrote:
Hi,
I'm trying to compile a regex Python with the re.VERBOSE flag (so that I can
add some friendly comments).
However, the issue is, I normally use constants to define re-usable bits of the
regex - however, these doesn't get interpreted inside the triple quotes.
For example:
import re
TIMESTAMP = r'(?P<timestamp>\d{2}:\d{2}:\d{2}.\d{9})'
SPACE = r' '
FOO = r'some_regex'
BAR = r'some_regex'
regexes = {
'data_sent': re.compile("""
TIMESTAMP # Timestamp of our log
message
SPACE
FOO # Some comment
SPACE
""", re.VERBOSE),
'data_received': re.compile("""
TIMESTAMP # Timestamp of our log
message
SPACE
BAR # Some comment
SPACE
""", re.VERBOSE),
}
Is there a way to use CONSTANTS (or at least re-use fragments of my regex), and
also use re.VERBOSE so I can comment my regex?
You could do it like this:
import re
constants = {}
constants['TIMESTAMP'] = r'(?P<timestamp>\d{2}:\d{2}:\d{2}.\d{9})'
constants['SPACE'] = r'\ ' # Escape the space because it'll be in a
VERBOSE regex.
constants['FOO'] = r'some_regex'
constants['BAR'] = r'some_regex'
regexes = {
'data_sent': re.compile("""
{TIMESTAMP} # Timestamp of our
log message
{SPACE}
{FOO} # Some comment
{SPACE}
""".format(**constants), re.VERBOSE),
'data_received': re.compile("""
{TIMESTAMP} # Timestamp of our
log message
{SPACE}
{BAR} # Some comment
{SPACE}
""".format(**constants), re.VERBOSE),
}
--
http://mail.python.org/mailman/listinfo/python-list