Python提取文件中所有括号内字符串的方法求助(现有代码失效)
解决方括号内容提取的问题
我看了你的代码和需求,问题主要出在两个地方:一是你用readlines()逐行处理时,re.search只能找到每行的第一个匹配项,还没处理无匹配时的None情况;二是你的正则表达式虽然能匹配目标字符,但不够通用,也没考虑一次性提取所有符合条件的内容。
下面是修正后的代码,能准确提取所有方括号内的内容:
import re from pathlib import Path # 读取整个文件内容,而非逐行,确保全局匹配不遗漏 with open("results.txt", "r") as myfile: data = myfile.read() # 使用re.findall捕获所有方括号内的内容 # 正则\[([^\]]+)\]的逻辑:匹配左方括号,捕获所有非右括号的字符,直到遇到右括号结束 matches = re.findall(r"\[([^\]]+)\]", data) # 逐个输出提取到的内容 for match in matches: print(match)
代码细节解释:
- 用
read()代替readlines():一次性读取全部内容,避免因内容分布在多行(哪怕当前例子没有)导致的匹配遗漏,鲁棒性更强。 re.findall():会返回所有符合正则规则的捕获组内容,而不是只找第一个匹配项,完美适配你提取所有括号内容的需求。- 正则
r"\[([^\]]+)\]":\[:匹配左方括号(因为[在正则里是特殊字符,需要用反斜杠转义)([^\]]+):捕获组,匹配任意不是右方括号的字符([^...]是反向字符集),+表示至少匹配一个字符,确保不会空匹配\]:匹配右方括号(同样需要转义)
运行这段代码后,就能得到你想要的输出:
0000NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN0DNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN0NNNNNNNNNNNNNNNNN0NN00N00NN0NNNNNNNNNNNNNN 0000NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN0DNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN0NNNNNNNNNNNNNNNNN0NN00N00NN0NNNNNNNNNNNNNN
另外,你的原代码如果遇到没有方括号的行,m会变成None,直接print(m)会输出无效内容,而上面的代码会自动忽略无匹配的情况,只输出有效提取结果。
内容的提问来源于stack exchange,提问作者Cyber_Tron
相关产品推荐
相关产品推荐

