Python:检查字符串是否符合特定格式

时间:2017-08-09 07:42:30

标签: python regex

用Python3编程。

我很难控制字符串是否符合特定格式。

所以,我知道Python没有像Java这样的.contain()方法,但我们可以使用正则表达式。 因此,我的代码可能看起来像这样,其中lowpan_headers是一个字段,字段是一个应该符合特定格式的字符串。 所以代码可能是这样的:

import re

lowpan_headers = self.converter.lowpan_string_to_headers(lowpan_string)
pattern = re.compile("^([A-Z][0-9]+)+$")
pattern.match(lowpan_headers[dest_addrS])

然而,我的问题是格式,我无法做到正确。 格式应该类似bbbb00000000000000170d0000306fb6,其中前4个字符应为bbbb,其余所有其余字段应为十六进制值(因此从0-9和af开始)。

所以有两个问题: (1)除了通过导入re之外,任何更简单的方法 (2)如果没有,你能帮我解决正则表达式吗?

4 个答案:

答案 0 :(得分:5)

至于正在寻找的正则表达式,我相信

^bbbb[0-9a-f]{28}$

应根据您的要求正确验证。

至于是否有比使用re模块更简单的方法,我会说没有真正实现您正在寻找的结果。虽然在python中使用in关键字的方式与您期望contains方法为字符串一起工作的方式有效,但实际上您想知道字符串是否格式正确。因此,最简单的解决方案是使用正则表达式,因此使用re模块。

答案 1 :(得分:1)

以下是不使用regex的解决方案:

lowpan_headers = 'bbbb00000000000000170d0000306fb6'
if lowpan_headers[:4] == 'bbbb' and len(lowpan_headers) == 32:
    try:
        int(lowpan_headers[4:], 16)  # tries interpreting the last 28 characters as hexadecimal
        print('Input is valid!')
    except ValueError:
        print('Invalid Input')  # hex test failed!
else:
    print('Invalid Input')  # either length test or 'bbbb' prefix test failed!

答案 2 :(得分:1)

实际上,Python确实具有与.contains()方法等效的方法。您可以使用in运算符:

if 'substring' in long_string:
    return True

类似的问题已经回答here

但是,对于您的情况,我仍然坚持使用正则表达式,因为您确实正在尝试评估某种字符串格式。为了确保您的字符串只有十六进制值,即0-9和a-f,以下正则表达式应该这样做:^[a-fA-F0-9]+$。额外的“并发症”是字符串开头的四个“b”。我认为一个简单的解决方法是将它们包括在内:^(bbbb)?[a-fA-F0-9]+$

>>> import re
>>> pattern = re.compile('^(bbbb)?[a-fA-F0-9]+$')
>>> test_1 = 'bbbb00000000000000170d0000306fb6'
>>> test_2 = 'bbbb00000000000000170d0000306fx6'
>>> pattern.match(test_1)
<_sre.SRE_Match object; span=(0, 32), match='bbbb00000000000000170d0000306fb6'>
>>> pattern.match(test_2)
>>>

当前缺少的部分是检查字符串的确切长度,您可以使用字符串长度方法或扩展正则表达式 - 但我相信你可以从这里获取它:-)

答案 3 :(得分:0)

正如我在评论中提到的,Python 确实具有等效的contains()

if "blah" not in somestring: 
    continue

(source) (PythonDocs)

如果您希望使用正则表达式来验证输入,可以使用:

^b{4}[0-9a-f]{28}$ - Regex101 Demo with explanation