python if list_item == re.match

python if list_item == re.match

提问人:haka 提问时间:1/30/2023 更新时间:1/31/2023 访问量:50

问:

我正在尝试在 python (googlecollab) 中练习带有条件的正则表达式模式,但卡住了(如果......和...通过从列表中获取正确的数字[000 到 999] - 我只需要数字,以一个数字“1”结尾(不是 11、111、211 - 我只需要 001、021、031、101),但它不返回任何具有多个条件的内容......如果我在条件下清除以“and”开头的代码 - 它返回所有 1、11、100 11......

list_ = []
list_.append('000')
for a in range(999):
    list_.append(str(a+1))

for i, el in  enumerate(list_):
    if len(el) == 1:
        list_[i] = '00'+el
    elif len(el) == 2:
        list_[i] = '0'+el

for item in list_:
    try:
        if item == re.match(r'\d\d1', item).group() \
        and item != re.match(r'\d11', item).group():
            print(item) 
    except:
        pass    
if-语句 设计模式 火柴 python-re

评论

1赞 001 1/31/2023
旁注:您的列表生成代码可以简化为list_ = [str(x).zfill(3) for x in range(1000)]
1赞 B Remmelzwaal 1/31/2023
您可以使用 $ 在字符串末尾查找 1。另外,我不会将你的比赛与比赛进行比较,而是检查比赛是否为空。item
2赞 B Remmelzwaal 1/31/2023
你可以用 .zfillf"{i:03d}"
0赞 haka 1/31/2023
Johnny Mopp、BRemmelzwaal、RomanPerekhrest,非常感谢!

答:

1赞 RomanPerekhrest 1/31/2023 #1

要仅匹配以一个(不多个)数字结尾的“数字”,请使用以下正则表达式模式:1

for i in list_:
    m = re.match(r'\d(0|[2-9])1$', i)
    if m:
        print(i)

  • (0|[2-9])- 交替组:匹配范围内的任一或任一02-9
0赞 sgargoyle777 1/31/2023 #2
  1. 不要在没有实际执行任何操作的情况下使用尝试捕获,它只会隐藏错误。
  2. match() 不返回字符串,而是返回匹配对象,不能使用 == 运算符,但如果没有匹配项,则返回将为 None,因此为了快速修复,您可以将其写为:
if re.match(r'\d\d1', item) is not None
  1. 您可以使用 [] 将除 1 以外的所有数字指定为 [023456789],而不是使用 and as in:
if re.match(r'\d[023456789]1', item) is not None:
  1. matchall() 在这里似乎更适合,请看一看。