mirror of
https://github.com/micropython/micropython.git
synced 2026-01-07 04:30:24 +01:00
extmod/modre: Add support for start- and endpos.
Pattern objects have two additional parameters for the ::search and ::match methods to define the starting and ending position of the subject within the string to be searched. This allows for searching a sub-string without creating a slice. However, one caveat of using the start-pos rather than a slice is that the start anchor (`^`) remains anchored to the beginning of the text. Signed-off-by: Jared Hancock <jared@greezybacon.me>
This commit is contained in:
committed by
Damien George
parent
485dac783b
commit
14ccdeb4d7
78
tests/extmod/re_start_end_pos.py
Normal file
78
tests/extmod/re_start_end_pos.py
Normal file
@@ -0,0 +1,78 @@
|
||||
# test start and end pos specification
|
||||
|
||||
try:
|
||||
import re
|
||||
except ImportError:
|
||||
print("SKIP")
|
||||
raise SystemExit
|
||||
|
||||
|
||||
def print_groups(match):
|
||||
print("----")
|
||||
try:
|
||||
if match is not None:
|
||||
i = 0
|
||||
while True:
|
||||
print(match.group(i))
|
||||
i += 1
|
||||
except IndexError:
|
||||
pass
|
||||
|
||||
|
||||
p = re.compile(r"o")
|
||||
m = p.match("dog")
|
||||
print_groups(m)
|
||||
|
||||
m = p.match("dog", 1)
|
||||
print_groups(m)
|
||||
|
||||
m = p.match("dog", 2)
|
||||
print_groups(m)
|
||||
|
||||
# No match past end of input
|
||||
m = p.match("dog", 5)
|
||||
print_groups(m)
|
||||
|
||||
m = p.match("dog", 0, 1)
|
||||
print_groups(m)
|
||||
|
||||
# Caret only matches the actual beginning
|
||||
p = re.compile(r"^o")
|
||||
m = p.match("dog", 1)
|
||||
print_groups(m)
|
||||
|
||||
# End at beginning means searching empty string
|
||||
p = re.compile(r"o")
|
||||
m = p.match("dog", 1, 1)
|
||||
print_groups(m)
|
||||
|
||||
# End before the beginning doesn't match anything
|
||||
m = p.match("dog", 2, 1)
|
||||
print_groups(m)
|
||||
|
||||
# Negative starting values don't crash
|
||||
m = p.search("dog", -2)
|
||||
print_groups(m)
|
||||
|
||||
m = p.search("dog", -2, -5)
|
||||
print_groups(m)
|
||||
|
||||
# Search also works
|
||||
print("--search")
|
||||
|
||||
p = re.compile(r"o")
|
||||
m = p.search("dog")
|
||||
print_groups(m)
|
||||
|
||||
m = p.search("dog", 1)
|
||||
print_groups(m)
|
||||
|
||||
m = p.search("dog", 2)
|
||||
print_groups(m)
|
||||
|
||||
# Negative starting values don't crash
|
||||
m = p.search("dog", -2)
|
||||
print_groups(m)
|
||||
|
||||
m = p.search("dog", -2, -5)
|
||||
print_groups(m)
|
||||
Reference in New Issue
Block a user