From 53bc760a78a0afee84cc14ff4f94492cc2822d36 Mon Sep 17 00:00:00 2001 From: royqh1979 Date: Wed, 10 Apr 2019 13:35:18 +0800 Subject: [PATCH 1/3] * feature: can match "12, 34, 56" using "%d,%d,%d" like sscanf in c. --- scanf.py | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/scanf.py b/scanf.py index 5e49f52..6991c38 100755 --- a/scanf.py +++ b/scanf.py @@ -39,32 +39,32 @@ # few characters needed to handle the field ommision. scanf_translate = [ (re.compile(_token), _pattern, _cast) for _token, _pattern, _cast in [ - ("%c", "(.)", lambda x:x), - ("%\*c", "(?:.)", None), + ("%c", "\s*(.)\s*", lambda x:x), + ("%\*c", "\s*(?:.)\s*", None), ("%(\d)c", "(.{%s})", lambda x:x), ("%\*(\d)c", "(?:.{%s})", None), - ("%(\d)[di]", "([+-]?\d{%s})", int), - ("%\*(\d)[di]", "(?:[+-]?\d{%s})", None), + ("%(\d)[di]", "\s*([+-]?\d{%s})", int), + ("%\*(\d)[di]", "\s*(?:[+-]?\d{%s})", None), - ("%[di]", "([+-]?\d+)", int), - ("%\*[di]", "(?:[+-]?\d+)", None), + ("%[di]", "\s*([+-]?\d+)", int), + ("%\*[di]", "\s*(?:[+-]?\d+)", None), - ("%u", "(\d+)", int), - ("%\*u", "(?:\d+)", None), + ("%u", "\s*(\d+)", int), + ("%\*u", "\s*(?:\d+)", None), - ("%[fgeE]", "([-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?)", float), - ("%\*[fgeE]", "(?:[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?)", None), + ("%[fgeE]", "\s*([-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?)", float), + ("%\*[fgeE]", "\s*(?:[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?)", None), ("%s", "(\S+)", lambda x:x), ("%\*s", "(?:\S+)", None), - ("%([xX])", "(0%s[\dA-Za-f]+)", lambda x:int(x, 16)), - ("%\*([xX])", "(?:0%s[\dA-Za-f]+)", None), + ("%([xX])", "\s*(0%s[\dA-Za-f]+)", lambda x:int(x, 16)), + ("%\*([xX])", "\s*(?:0%s[\dA-Za-f]+)", None), - ("%o", "(0[0-7]*)", lambda x:int(x, 8)), - ("%\*o", "(?:0[0-7]*)", None), + ("%o", "\s*(0[0-7]*)", lambda x:int(x, 8)), + ("%\*o", "\s*(?:0[0-7]*)", None), ]] From b488643e209fce454437e84b52f69ff0a9a13d5d Mon Sep 17 00:00:00 2001 From: royqh1979 Date: Wed, 10 Apr 2019 13:39:17 +0800 Subject: [PATCH 2/3] * fix: don't add \s when parsing %c --- scanf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scanf.py b/scanf.py index 6991c38..92cd441 100755 --- a/scanf.py +++ b/scanf.py @@ -39,8 +39,8 @@ # few characters needed to handle the field ommision. scanf_translate = [ (re.compile(_token), _pattern, _cast) for _token, _pattern, _cast in [ - ("%c", "\s*(.)\s*", lambda x:x), - ("%\*c", "\s*(?:.)\s*", None), + ("%c", "(.)\s*", lambda x:x), + ("%\*c", "(?:.)\s*", None), ("%(\d)c", "(.{%s})", lambda x:x), ("%\*(\d)c", "(?:.{%s})", None), From 41e6541e2c9f46baac5001e4ab64ff17e64ed8ec Mon Sep 17 00:00:00 2001 From: royqh1979 Date: Wed, 10 Apr 2019 13:40:05 +0800 Subject: [PATCH 3/3] * fix: don't add \s when parsing %c --- scanf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scanf.py b/scanf.py index 92cd441..dab5d33 100755 --- a/scanf.py +++ b/scanf.py @@ -39,8 +39,8 @@ # few characters needed to handle the field ommision. scanf_translate = [ (re.compile(_token), _pattern, _cast) for _token, _pattern, _cast in [ - ("%c", "(.)\s*", lambda x:x), - ("%\*c", "(?:.)\s*", None), + ("%c", "(.)", lambda x:x), + ("%\*c", "(?:.)", None), ("%(\d)c", "(.{%s})", lambda x:x), ("%\*(\d)c", "(?:.{%s})", None),