我正在尝试使用正则表达式从文件名中提取特定文本,并且如果我仅传递一个文件名作为输入,则能够做到这一点。但是,我想对特定目录中的所有文件名执行相同的操作。我了解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/

10-09 16:07