使用reg exp检查测试字符串是否为固定格式

sro*_*ock 2 python regex

我想确保使用正则表达式确保字符串格式为“ 999.999-A9-Won”,并且没有任何空格,制表符或换行符。

  1. 0到9范围内可能有2或3个数字。
  2. 后面加句号“。”
  3. 再次跟上2或3个数字,范围为0-9
  4. 后跟连字符,字符“ A”和0-9之间的数字。
  5. 随后可以执行任何操作。

示例:87.98-A8-abcdef

到目前为止,我提出的代码是:

testString = "87.98-A1-help"
regCompiled = re.compile('^[0-9][0-9][.][0-9][0-9][-A][0-9][-]*');
checkMatch = re.match(regCompiled, testString);
if checkMatch:
    print ("FOUND")
else:
    print("Not Found")
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用。我不确定我缺少什么,这里的问题是我不检查空格,制表符和换行符,也不对十进制前后的整数进行硬编码。

Mar*_*ers 5

使用{m,n}可以指定图案可重复的次数,并且\d字符类匹配所有数字。该\S字符类匹配任何是不是空白。使用这些正则表达式可以简化为:

re.compile(r'\d{2,3}\.\d{2,3}-A\d-\S*\Z')
Run Code Online (Sandbox Code Playgroud)

还要注意\Z锚点,使\S*表达式一直匹配到字符串的末尾。此处不允许使用空格(换行符,制表符等)。如果将此与.match()方法结合使用,则可以确保测试字符串中的所有字符均符合该模式,仅此而已。见search()match()有关的更多信息.match()

一个小示范:

>>> import re
>>> pattern = re.compile(r'\d{2,3}\.\d{2,3}-A\d-\S*\Z')
>>> pattern.match('87.98-A1-help')
<_sre.SRE_Match object at 0x1026905e0>
>>> pattern.match('123.45-A6-no whitespace allowed')
>>> pattern.match('123.45-A6-everything_else_is_allowed')
<_sre.SRE_Match object at 0x1026905e0>
Run Code Online (Sandbox Code Playgroud)