Checking whole string with a regex

前端 未结 5 1852
醉话见心
醉话见心 2020-11-22 08:34

I\'m trying to check if a string is a number, so the regex \"\\d+\" seemed good. However that regex also fits \"78.46.92.168:8000\" for some reason, which I do not want, a l

5条回答
  •  庸人自扰
    2020-11-22 08:55

    There are a couple of options in Python to match an entire input with a regex.

    Python 2 and 3

    In Python 2 and 3, you may use

    re.match(r'\d+$') # re.match anchors the match at the start of the string, so $ is what remains to add
    

    or - to avoid matching before the final \n in the string:

    re.match(r'\d+\Z') # \Z will only match at the very end of the string
    

    Or the same as above with re.search method requiring the use of ^ / \A start-of-string anchor as it does not anchor the match at the start of the string:

    re.search(r'^\d+$')
    re.search(r'\A\d+\Z')
    

    Note that \A is an unambiguous string start anchor, its behavior cannot be redefined with any modifiers (re.M / re.MULTILINE can only redefine the ^ and $ behavior).

    Python 3

    All those cases described in the above section and one more useful method, re.fullmatch (also present in the PyPi regex module):

    If the whole string matches the regular expression pattern, return a corresponding match object. Return None if the string does not match the pattern; note that this is different from a zero-length match.

    So, after you compile the regex, just use the appropriate method:

    _rex = re.compile("\d+")
    if _rex.fullmatch(s):
        doStuff()
    

提交回复
热议问题