summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Leech <andrew.leech@planetinnovation.com.au>2020-09-25 12:27:02 +1000
committerDamien George <damien@micropython.org>2020-09-30 23:18:34 +1000
commit319437d4bd7c97ab18275d3eaf1bc190554f9df7 (patch)
tree93d6cf174d3286cbabb2266698887a621b156f26
parent0fd0eb00aa5b9d311046d48d73a8cfabb30d7dd6 (diff)
extmod/modure: Allow \\ in re.sub replacements.
-rw-r--r--extmod/modure.c3
-rw-r--r--tests/extmod/ure_sub.py6
2 files changed, 9 insertions, 0 deletions
diff --git a/extmod/modure.c b/extmod/modure.c
index 328c897d8..220587b42 100644
--- a/extmod/modure.c
+++ b/extmod/modure.c
@@ -343,6 +343,9 @@ STATIC mp_obj_t re_sub_helper(size_t n_args, const mp_obj_t *args) {
const char *end_match = match->caps[match_no * 2 + 1];
vstr_add_strn(&vstr_return, start_match, end_match - start_match);
}
+ } else if (*repl == '\\') {
+ // Add the \ character
+ vstr_add_byte(&vstr_return, *repl++);
}
} else {
// Just add the current byte from the replacement string
diff --git a/tests/extmod/ure_sub.py b/tests/extmod/ure_sub.py
index 953e7bf62..ae6ad28d6 100644
--- a/tests/extmod/ure_sub.py
+++ b/tests/extmod/ure_sub.py
@@ -43,6 +43,9 @@ print(
)
)
+# \g immediately followed by another \g
+print(re.sub("(abc)", r"\g<1>\g<1>", "abc"))
+
# no matches at all
print(re.sub("a", "b", "c"))
@@ -69,3 +72,6 @@ try:
re.sub(123, "a", "a")
except TypeError:
print("TypeError")
+
+# Include \ in the sub replacement
+print(re.sub("b", "\\\\b", "abc"))