提问人:haka 提问时间:1/30/2023 更新时间:1/31/2023 访问量:50
python if list_item == re.match
python if list_item == re.match
问:
我正在尝试在 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
答:
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])
- 交替组:匹配范围内的任一或任一0
2-9
0赞
sgargoyle777
1/31/2023
#2
- 不要在没有实际执行任何操作的情况下使用尝试捕获,它只会隐藏错误。
- match() 不返回字符串,而是返回匹配对象,不能使用 == 运算符,但如果没有匹配项,则返回将为 None,因此为了快速修复,您可以将其写为:
if re.match(r'\d\d1', item) is not None
- 您可以使用 [] 将除 1 以外的所有数字指定为 [023456789],而不是使用 and as in:
if re.match(r'\d[023456789]1', item) is not None:
- matchall() 在这里似乎更适合,请看一看。
评论
list_ = [str(x).zfill(3) for x in range(1000)]
item
zfill
f"{i:03d}"