如何验证以某种前缀格式开头的文件?
How to validate a file starts with certain perfix format?
我有一个这样的文件列表。
["TYBN-220422-257172171.txt", "TYBN-120522-257172174.txt", "TYBN-320422-657172171.txt", "TYBN-220622-237172174.txt", "TYBN-FRTRE-FFF.txt",....]
我只想获取格式如下的文件TYBN-220422-257172171.txt
valid = "TYBN-{}-{}".format(numericvalue, numericvalue)
我只想要列表中的此类文件
这可能最容易使用正则表达式来匹配所需的格式,即
TYBN-\d+-\d+\.txt$
查找以字符 TYBN-
开头,后跟一位或多位数字 (\d+
),一个 -
,更多数字,然后以 [=16] 结尾的名称=].
请注意,当使用 re.match
时(如以下代码所示),匹配项会自动锚定到字符串的开头,因此前导 ^
(start-of-string 锚点)是正则表达式不需要。
在python中:
import re
filelist = ["TYBN-220422-257172171.txt",
"TYBN-120522-257172174.txt",
"TYBN-320422-657172171.txt",
"TYBN-220622-237172174.txt",
"TYBN-FRTRE-FFF.txt"
]
regex = re.compile(r'TYBN-\d+-\d+\.txt$')
valid = [file for file in filelist if regex.match(file)]
输出:
[
'TYBN-220422-257172171.txt',
'TYBN-120522-257172174.txt',
'TYBN-320422-657172171.txt',
'TYBN-220622-237172174.txt'
]
试试这个。
lst = ["TYBN-220422-257172171.txt", "TYBN-120522-257172174.txt", "TYBN-320422-657172171.txt", "TYBN-220622-237172174.txt", "TYBN-FRTRE-FFF.txt"]
valid_format = ['TYBN',True,True] # here true for digits
valid = []
for a in lst:
l = a.replace('.txt','').split('-')
if l[0] == valid_format[0]:
if [i.isdigit() for i in l[1:]] == valid_format[1:]:
valid.append(a)
print(valid)
输出:
['TYBN-220422-257172171.txt',
'TYBN-120522-257172174.txt',
'TYBN-320422-657172171.txt',
'TYBN-220622-237172174.txt']
正则表达式解释:
- ^ 字符串的开头
- $ 字符串结尾
- \d 匹配所有数字。相当于[0-9]
- + 一个或多个表达式
import re
files = ["TYBN-220422-257172171.txt", "TYBN-120522-257172174.txt"]
pattern = re.compile("^TYBN-\d+-\d+\.txt$")
for f in files:
if pattern.match(f):
print(f + " matched naming convention.")
我有一个这样的文件列表。
["TYBN-220422-257172171.txt", "TYBN-120522-257172174.txt", "TYBN-320422-657172171.txt", "TYBN-220622-237172174.txt", "TYBN-FRTRE-FFF.txt",....]
我只想获取格式如下的文件TYBN-220422-257172171.txt
valid = "TYBN-{}-{}".format(numericvalue, numericvalue)
我只想要列表中的此类文件
这可能最容易使用正则表达式来匹配所需的格式,即
TYBN-\d+-\d+\.txt$
查找以字符 TYBN-
开头,后跟一位或多位数字 (\d+
),一个 -
,更多数字,然后以 [=16] 结尾的名称=].
请注意,当使用 re.match
时(如以下代码所示),匹配项会自动锚定到字符串的开头,因此前导 ^
(start-of-string 锚点)是正则表达式不需要。
在python中:
import re
filelist = ["TYBN-220422-257172171.txt",
"TYBN-120522-257172174.txt",
"TYBN-320422-657172171.txt",
"TYBN-220622-237172174.txt",
"TYBN-FRTRE-FFF.txt"
]
regex = re.compile(r'TYBN-\d+-\d+\.txt$')
valid = [file for file in filelist if regex.match(file)]
输出:
[
'TYBN-220422-257172171.txt',
'TYBN-120522-257172174.txt',
'TYBN-320422-657172171.txt',
'TYBN-220622-237172174.txt'
]
试试这个。
lst = ["TYBN-220422-257172171.txt", "TYBN-120522-257172174.txt", "TYBN-320422-657172171.txt", "TYBN-220622-237172174.txt", "TYBN-FRTRE-FFF.txt"]
valid_format = ['TYBN',True,True] # here true for digits
valid = []
for a in lst:
l = a.replace('.txt','').split('-')
if l[0] == valid_format[0]:
if [i.isdigit() for i in l[1:]] == valid_format[1:]:
valid.append(a)
print(valid)
输出:
['TYBN-220422-257172171.txt',
'TYBN-120522-257172174.txt',
'TYBN-320422-657172171.txt',
'TYBN-220622-237172174.txt']
正则表达式解释:
- ^ 字符串的开头
- $ 字符串结尾
- \d 匹配所有数字。相当于[0-9]
- + 一个或多个表达式
import re
files = ["TYBN-220422-257172171.txt", "TYBN-120522-257172174.txt"]
pattern = re.compile("^TYBN-\d+-\d+\.txt$")
for f in files:
if pattern.match(f):
print(f + " matched naming convention.")