* Convenience regular expression module.
This commit is contained in:
65
regexps.py
Normal file
65
regexps.py
Normal file
@@ -0,0 +1,65 @@
|
||||
# -*- python -*-
|
||||
#
|
||||
# $Id: regexps.py,v 1.1 2010-10-06 16:37:42 wirawan Exp $
|
||||
#
|
||||
# Created: 20101006
|
||||
# Wirawan Purwanto
|
||||
#
|
||||
"""
|
||||
|
||||
Various convenience regular expression tools.
|
||||
|
||||
"""
|
||||
|
||||
import re
|
||||
|
||||
|
||||
class regex(object):
|
||||
"""Single-state regex matcher.
|
||||
For quick and dirty matching (single-use, disposable).
|
||||
This is intended to make python scripts a bit more convenient to
|
||||
use for regexp-intensive matches, just like perl.
|
||||
|
||||
Examples:
|
||||
|
||||
rx = regex(r'deltau = ([0-9.]+)')
|
||||
rx2 = regex(r'deltau2 = ([0-9.]+)')
|
||||
...
|
||||
for text in f:
|
||||
if rx % text: # equal to rx.search(text)
|
||||
deltau = float(rx[1])
|
||||
if rx2 ^ text: # equal to rx.match(text)
|
||||
deltau2 = float(rx2[1])
|
||||
|
||||
Note that the regex object must appear as the *LEFT* operand of the
|
||||
string being scanned.
|
||||
|
||||
"""
|
||||
def __init__(self, pat, flags=0):
|
||||
self.rx = re.compile(pat, flags)
|
||||
|
||||
# The following names are the same as standard python re compiled object:
|
||||
def match(self, s, flags=0):
|
||||
self.m = self.rx.match(s, flags)
|
||||
return self.m
|
||||
def search(self, s, flags=0):
|
||||
self.m = self.rx.search(s, flags)
|
||||
return self.m
|
||||
|
||||
# Experimental: using operators instead of names
|
||||
# No user-defined flags are possible in this case.
|
||||
def __xor__(self, s):
|
||||
"""Match the string to the regex at the beginning."""
|
||||
self.m = self.rx.match(s)
|
||||
return self.m
|
||||
def __mod__(self, s):
|
||||
"""Match the string to the regex at the any position.
|
||||
Too bad python does not have ~= like perl, so we use the
|
||||
quirky % or == here."""
|
||||
self.m = self.rx.search(s)
|
||||
return self.m
|
||||
__eq__ = __mod__
|
||||
|
||||
def __getitem__(self, i):
|
||||
"""Returns the i-th group from the last match operation."""
|
||||
return self.m.group(i)
|
||||
Reference in New Issue
Block a user