gpt4 book ai didi

python - 在 Python 正则表达式中使用列表中的值作为变量

转载 作者:行者123 更新时间:2023-12-01 08:41:05 25 4
gpt4 key购买 nike

我正在尝试对文件夹中的某些 csv 文件采取一些操作,所有这些文件应具有相同的格式,除了不同的 ID;它看起来像:Myfile_100_2018-11-26.csv,所有这些数字都不同(100表示id,其余数字是日期时间);我有一个列表对象,其中包含我要打开的所有 id,例如 my_id=[100,200,300,400]

import pandas as pd
import os
import re

allfiles = os.listdir('.')
game_id=[100,200,300,400]
from id in game_id:
files = [f for f in allfiles if re.search(r'(%s+_\d{4}-\d{2}-\d{2}\.csv$')%game_id, f)]

在我的代码中,我想使用 game_id 替换 %s,这样我就可以循环 id 为 100、200、300,400 的所有文件;但是我收到错误:SyntaxError:game_id 之后的逗号语法无效。

我尝试了从其他问题中搜索到的许多组合,但似乎对我不起作用,任何人都可以提供建议吗?谢谢

最佳答案

您正在尝试通过game_idre.search方法而不是r'(%s+_\d{4}-\d{2}-\d{2}\.csv$'字符串文字,这会造成麻烦。

然后,如果左括号不匹配而没有右括号,则会导致正则表达式错误。

此外,+之后%s可能会导致意外的匹配:100 , 10001000000可以返回游戏ID。

您可以使用

import re
allfiles=['YES_100_1234-22-33.csv', 'NO_1000_1023-22-33.csv', 'no_abc.csv']
game_id=[100,200,300,400]
rx=re.compile(r'(?<!\d)(?:%s)_\d{4}-\d{2}-\d{2}\.csv$'%"|".join(map(str,game_id)))
# => (?<!\d)(?:100|200|300|400)_\d{4}-\d{2}-\d{2}\.csv$
files = [f for f in allfiles if rx.search(f)]
print(files) # => ['YES_100_1234-22-33.csv']

正则表达式的形成如下

rx=re.compile(r'(?<!\d)(?:%s)_\d{4}-\d{2}-\d{2}\.csv$'%"|".join(map(str,game_id)))
# => (?<!\d)(?:100|200|300|400)_\d{4}-\d{2}-\d{2}\.csv$

请参阅regex demo .

详细信息

  • (?<!\d) - 下一个字符之前没有数字匹配
  • (?:100|200|300|400) -game_id使用交替运算符连接的值
  • _\d{4}-\d{2}-\d{2} -_ , 4 位数字, - , 2 位数字, - , 2 位数字
  • \.csv$ -.csv和字符串结尾。

关于python - 在 Python 正则表达式中使用列表中的值作为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53493437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com