Check if a string is hexadecimal

后端 未结 11 1486
说谎
说谎 2020-12-13 06:14

I know the easiest way is using a regular expression, but I wonder if there are other ways to do this check.

Why do I need this? I am writing a Python script that re

11条回答
  •  半阙折子戏
    2020-12-13 06:36

    I know the op mentioned regular expressions, but I wanted to contribute such a solution for completeness' sake:

    def is_hex(s):
        return re.fullmatch(r"^[0-9a-fA-F]$", s or "") is not None
    

    Performance

    In order to evaluate the performance of the different solutions proposed here, I used Python's timeit module. The input strings are generated randomly for three different lengths, 10, 100, 1000:

    s=''.join(random.choice('0123456789abcdef') for _ in range(10))
    

    Levon's solutions:

    # int(s, 16)
      10: 0.257451018987922
     100: 0.40081690801889636
    1000: 1.8926858339982573
    
    # all(_ in string.hexdigits for _ in s)
      10:  1.2884491360164247
     100: 10.047717947978526
    1000: 94.35805322701344
    

    Other answers are variations of these two. Using a regular expression:

    # re.fullmatch(r'^[0-9a-fA-F]$', s or '')
      10: 0.725040541990893
     100: 0.7184272820013575
    1000: 0.7190397029917222
    

    Picking the right solution thus depends on the length on the input string and whether exceptions can be handled safely. The regular expression certainly handles large strings much faster (and won't throw a ValueError on overflow), but int() is the winner for shorter strings.

提交回复
热议问题