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

Reply via email to