[英]Python: Regex to extract strings from a file name that follows a specific pattern
[英]python regex to extract only specific pattern file names from a list
我只想从列表中提取某些文件。 我需要在仅从列表中提取选定文件时应用以下规则。
如果文件包含f[1-99]或t[1-99]或v[1-99]或f[1-9]_v[1-9]_t[1-9]的组合。 下面是一些示例。
phone_football_androind_1_v1_te_t1_fe
phone_football_ios_v1_t1
foot_cricket2345678_f12_t4
tfd_fr_ve_t1_v1_f3_201234_yyymmmdd
def_000_t4_f1
file_job_1234567_f1_t55
ROKLOP_f33_t44
agdcv_t45
gop_gop_f1_t14_v14
file_op_v1_t1
fop_f1_v1_1223
你能帮忙检查一下上面的模式是否包含在文件中,并且只获取具有以下模式的文件吗? 我试过跟随但坚持使用 python 中的 reges。 不确定如何在正则表达式中添加 OR 条件
import re
# Take input from users
MyString1 = "tfd_fr_ve_t1_v1_f3_201234_yyymmmdd"
# re.search() returns a Match object
# if there is a match anywhere in the string
if re.search('(_v(\d+)).*', MyString1):
print("YES,it is present in string ")
else:
print("NO,string is not present")
要检查是否存在匹配项:
_[ftv][1-9]\d?(?!\d)
解释
_
字面匹配[ftv]
匹配其中一个f
t
v
[1-9]\d?
匹配数字 1- 99(?!\d)
断言右边不是数字示例代码
import re
strings = [
"tfd_fr_ve_t1_v1_f3_201234_yyymmmdd",
"phone_football_androind_1_v1_te_t1_fe",
"phone_football_ios_v1_t1",
"foot_cricket2345678_f12_t4",
"tfd_fr_ve_t1_v1_f3_201234_yyymmmdd",
"def_000_t4_f1",
"file_job_1234567_f1_t55",
"ROKLOP_f33_t44",
"agdcv_t45",
"gop_gop_f1_t14_v14",
"file_op_v1_t1",
"fop_f1_v1_1223",
"test"
]
pattern = r"_[ftv][1-9]\d?(?!\d)"
for s in strings:
if re.search(pattern, s):
print(f"YES, present in '{s}' ")
else:
print(f"NO, not present in '{s}'")
输出
YES, present in 'tfd_fr_ve_t1_v1_f3_201234_yyymmmdd'
YES, present in 'phone_football_androind_1_v1_te_t1_fe'
YES, present in 'phone_football_ios_v1_t1'
YES, present in 'foot_cricket2345678_f12_t4'
YES, present in 'tfd_fr_ve_t1_v1_f3_201234_yyymmmdd'
YES, present in 'def_000_t4_f1'
YES, present in 'file_job_1234567_f1_t55'
YES, present in 'ROKLOP_f33_t44'
YES, present in 'agdcv_t45'
YES, present in 'gop_gop_f1_t14_v14'
YES, present in 'file_op_v1_t1'
YES, present in 'fop_f1_v1_1223'
NO, not present in 'test'
我认为这个小正则表达式可以匹配您的所有结果:
'(f|t|v)[1-9]{1,2}'
下面是显示匹配结果的一小段代码:
>>> files = ['phone_football_androind_1_v1_te_t1_fe', 'phone_football_ios_v1_t1', 'foot_cricket2345678_f12_t4', 'tfd_fr_ve_t1_v1_f3_201234_yyymmmdd', 'def_000_t4_f1', 'file_job_1234567_f1_t55', 'ROKLOP_f33_t44', 'agdcv_t45', 'gop_gop_f1_t14_v14', 'file_op_v1_t1', 'fop_f1_v1_1223']
>>> regex = '(f|t|v)[1-9]{1,2}'
>>> for file in files:
... if re.search(regex, file):
... print(f"match: {file}")
...
match: phone_football_androind_1_v1_te_t1_fe
match: phone_football_ios_v1_t1
match: foot_cricket2345678_f12_t4
match: tfd_fr_ve_t1_v1_f3_201234_yyymmmdd
match: def_000_t4_f1
match: file_job_1234567_f1_t55
match: ROKLOP_f33_t44
match: agdcv_t45
match: gop_gop_f1_t14_v14
match: file_op_v1_t1
match: fop_f1_v1_1223
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.