我正在尝试使用正则表达式从文件名中提取特定文本,并且如果我仅传递一个文件名作为输入,则能够做到这一点。但是,我想对特定目录中的所有文件名执行相同的操作。我了解re.search
只能接受字符串作为输入吗?有没有办法将目录作为输入传递?
以下是我正在使用的代码,
import os
import sys
import re
firstarg=sys.argv[1]
a = str(firstarg)
m = re.search(r'(?<=T)(.*)(?=\()', os.listdir( a )).group()
print (m)
最佳答案
这将打印与正则表达式匹配的字符串数组。
这将对目录中的每个文件和文件夹运行正则表达式,
如果任何文件或文件夹包含匹配项,则该匹配项将附加到数组'm'
注意:不是递归的。
import os
import sys
import re
firstarg=sys.argv[1]
a = str(firstarg)
files = os.listdir(a)
m = []
for f in files:
match = re.search(r'(?<=T)(.*)(?=\()', f)
if( match != None):
m.append( match.group() )
print (m)
例:
sys.argv [1] ='/'
文件树:
/
File_Tvalue1(
File_Tvalue2(
Folder_Tvalue3(
File_Tvalue4(
结果:
['value1','value2','value3']
如果您希望它是递归函数。
import os
import sys
import re
def FindMatchesInDirectory(directory, afterRegex, beforeRegex, recursive=True):
results = []
for r, d, f in os.walk(directory):
for path in f:
match = re.search(r'(?<='+str(afterRegex)+')(.*)(?='+str(beforeRegex)+')', str(path))
if( match != None):
results.append( match.group() )
for path in d:
match = re.search(r'(?<='+str(afterRegex)+')(.*)(?='+str(beforeRegex)+')', str(path))
if( match != None):
results.append( match.group() )
if ( recursive != True):
break
return results
示例:递归获取所有匹配项。 'T'和'('之间的任何值
print (FindMatchesInDirectory(sys.argv[1], 'T', '\('))
结果:
['value3','value2','value1','value4']
示例:获取所有不带递归的匹配
print (FindMatchesInDirectory('/', 'T', '\(', False))
结果:
['value3','value2','value1']
关于python - 在Python Regex中指定目录作为输入,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58537106/