正则表达式不匹配值

时间:2017-07-10 16:54:37

标签: python regex

所以我创建了一个读取输入字符串的程序,并查看它们是否包含列表中的代码。我试图使用正则表达式来获取匹配的字符串,但我的正则表达式有点问题。这是我的参考代码:

import re

values = ["T1245F8", "T1267F8", "T1234F8"]

checkVals = ["rfgT12B45F8asd", "b65dT12B67F8lgkt", "4fgy7tgT12B34F8", "fgtrfT12B94F8fkg"]

for i in range(len(checkVals)):
    match = False
    parsedVal = re.match('T12B[0-9]{2}F8', checkVals[i])
    for j in range(len(values)):
        if parsedVal == values[j]:
            match = True
    print(match)

如果打印出3 True和1 False语句,我期待的输出。但是,而不是获得4个False语句。

编辑:修正了我的正则表达式中的拼写错误,但它仍然无法正常工作。

3 个答案:

答案 0 :(得分:2)

这可能只是你问题帖中的一个错字,但我认为你的意思是:

values = ["T12B45F8", "T12B67F8", "T12B34F8"]

然后,只需更改此行:

parsedVal = re.match('T12B[0-9]{2}F8', checkVals[i])

到这一个:

parsedVal = re.search('T12B[0-9]{2}F8', checkVals[i]).group()

这将为您提供匹配的实际部分。

输出:

True
True
True
False

作为结论,整个代码应如下所示:

import re

values = ["T12B45F8", "T12B67F8", "T12B34F8"]

checkVals = ["rfgT12B45F8asd", "b65dT12B67F8lgkt", "4fgy7tgT12B34F8", "fgtrfT12B94F8fkg"]

for i in range(len(checkVals)):
    match = False
    parsedVal = re.search('T12B[0-9]{2}F8', checkVals[i]).group()
    for j in range(len(values)):
        if parsedVal == values[j]:
            match = True
    print(match)

我相信这就是你要找的东西。

答案 1 :(得分:0)

我认为有2个问题

首先:

正则表达式末尾的$不允许在

之后添加任何字符

第二

应该搜索T12B而不是T12

*您也可以在输入测试数据时输入类型。例如,rfgT12B45F8asd与您当前的表达式不匹配,因为它包含T12B作为您的号码的前缀T12

最终正则表达式:

T12B[0-9]{2}F8

答案 2 :(得分:-1)

从正则表达式中删除$,它在字符串末尾匹配,而您的字符串不在F8中结束。另外,请使用re.search代替re.match