parent
96d1f9afd7
commit
46e5caa7a2
1 changed files with 65 additions and 0 deletions
@ -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) |
Loading…
Reference in new issue