Python Regex - 检查“123456/2016”模式

时间:2016-12-25 17:44:43

标签: python regex

我想检查注册表是否与“76/2016”,“1454/2016”,“153432/2013”​​等模式匹配。从技术上讲,在破折号之前,可以有多达6个字符的数字组合(可以是2,可以是5,没有特定的规则),破折号后有一组四个数字(年)。 / p>

此外,可能会出现一些“丢失的空间”,例如“76/2016”或“1454/2016”,而没有特定的规则。

我正在使用re.search(pattern,string),但我很难编写出符合我需求的模式。有人可以帮忙吗?正如你所看到的那样,我是正则表达式的初学者......

3 个答案:

答案 0 :(得分:1)

  短划线前的

可以是最多6个字符的任意数字组合

  • 您的示例甚至没有破折号,但确实有斜杠" /"。
  • 您只显示数字,但您说"最多6个字符"。

假设你的意思是:

  • 零个或多个空格,
  • 1-6位,
  • 斜线
  • 一个4位数的年份

尝试以下方法:

foo = re.compile("\s*(\d{1,6})/(\d{4})")
for text in list_of_strings:
    match = foo.match(text)
    if match:
        num, year = map(int, match.groups())
        print("Good: %d / %d" % (num, year))
    else:
        print("Bad: \"%s\"" % text)

答案 1 :(得分:1)

你提到你想要匹配。您可能要尝试re.match匹配对象始终为true,如果没有匹配,则会返回None

import re
data = """76/2016
23376/2016
aasss
3376/2016"""

pat = re.compile(r'\d{1,6}/\d{4}')

if re.match(pat,data):
    print('A match')

(Out)的

A match

答案 2 :(得分:0)

re.search(r'\d{1,6}/\d{4}', string)