【发布时间】:2020-01-05 16:04:00
【问题描述】:
我想解析一些文件并将任何匹配项附加到字典中。 - 我的正则表达式确实有效,所以这里没有错误... 但文件包含一些不同的公式,我需要检查不同的正则表达式 - 我无法手动执行此操作,因为我的文件夹中有超过 10.000 个文件。
无论如何,我想看看我的正则表达式是否匹配。如果是这样,我想将解析后的文件写入一个也可以工作的dict-,但是如果我的正则表达式 none 匹配,我想查看相应的文件名..(附加到列表)..
我的问题:我不知道如何相应地组合 if、elif 和 else 语句。所以应该是这样的:
- 打开文件并检查第一个正则表达式
- 如果正则表达式匹配追加到字典
- 如果正则表达式不匹配,请尝试第二个正则表达式
- 如果正则表达式匹配写入字典
- 如果我的正则表达式都不匹配写入文件到列表 -- 最后一步是让我检查配方
所以我阅读并尝试了:
files = ['C:/Users/file1.txt','C:/Users/file2.txt']
reg1 = r"some regex"
reg2 = r"some regex2"
error_list = []
dict_result = {}
for file in files:
with open(file,'r', encoding='utf-8') as in_file:
content = in_file.read().lower()
if re.match(reg1, content, re.IGNORECASE | re.DOTALL | re.MULTILINE):
matches_reg1 = re.findall(reg1, content, re.IGNORECASE | re.DOTALL | re.MULTILINE)
result = max(matches_reg1, key=len)
result = str(result).replace('\n', '')
dict_result["result"] = result
elif re.match(reg2, content, re.IGNORECASE | re.DOTALL | re.MULTILINE):
matches_reg2 = re.findall(reg2, content, re.IGNORECASE | re.DOTALL | re.MULTILINE)
result = max(matches_reg2, key=len)
result = str(result).replace('\n', '')
dict_result["result"] = result
else:
error_list.append(file)
print("ERROR: ", file)
但这绝对行不通.. 做得更好的是这个..但它似乎效率低下并且没有显示错误文件,只是第一个正则表达式的错误文件:
for file in files:
with open(file,'r', encoding='utf-8') as in_file:
content = in_file.read().lower()
matches_reg1 = re.findall(reg1, content, re.IGNORECASE | re.DOTALL | re.MULTILINE)
matches_reg2 = re.findall(reg2, content, re.IGNORECASE | re.DOTALL | re.MULTILINE)
if matches_reg1:
result = max(matches_reg1, key=len)
result = str(result).replace('\n', '')
dict_result["result"] = result
if matches_reg2:
result = max(matches_reg2, key=len)
result = str(result).replace('\n', '')
dict_result["result"] = result
else:
error_list.append(file)
print("ERROR: ", file)
...有人可以解释一种有效的方法来解决这个问题吗?如果我有一个不同正则表达式方法的列表,并且喜欢检查每个正则表达式直到匹配,否则将文件路径写入列表以供进一步分析..
也试过了..
matches_reg1 = re.findall(reg1,..)
if matches_reg1:
...
elif matches_reg1:
match = re.findall(reg2, ...)
【问题讨论】:
-
第一个代码以什么方式“绝对不起作用”?
-
您的代码缺少一些对象,例如
name和files的值。 -
第一个代码只显示了
else语句...虽然,我知道第一个正则表达式应该匹配一些文件
标签: python regex python-3.x if-statement conditional-statements