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