我正在读取一个文本文件并试图捕获每个不同标记的参数之一,该标记尚未被注释掉。
更具体地说,我有以下输入...
maybe there is some text \THISTAG[arg1=1,argtwo]{WANT0}
% \THISTAG[arg1=1,argtwo]{NOTWANT}
% blah blah \THISTAG[arg1=1,argtwo]{NOTWANT}
\THISTAG[arg1=1,argtwo]{WANT1}\THISTAG[arg1=1,argtwo]{WANT2}\\stuff
\sometag{stuff I don't want}[{\THISTAG[arg1=1,argtwo]{WANT3}}]{more stuff I don't want}
\THISTAG[arg1=1,argtwo]{OBV_WANT}
我想要以下输出
WANT0
WANT1
WANT2
WANT3
OBV_WANT
到目前为止,我有以下代码,它没有完成我想要的
with open(target, "r") as ins:
f = re.findall(r'^(?:[^%])?\\THISTAG\[.+\]{(.+?)}(?:{.+})?', ins.read(),re.MULTILINE)
最佳答案
您可以逐行执行正则表达式,过滤掉以 %
开头的正则表达式:
import re
res = []
with open('test.txt') as f:
res = sum([re.findall('\\THISTAG\[.*?\]{(.*?)}', line)
for line in f if not line.startswith('%')
], [])
print res # ['WANT0', 'WANT1', 'WANT2', 'WANT3', 'OBV_WANT']
关于python - python中具有多个匹配项和否定条件的多行正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36707329/