python - python中具有多个匹配项和否定条件的多行正则表达式

标签 python regex

我正在读取一个文本文件并试图捕获每个不同标记的参数之一,该标记尚未被注释掉。

更具体地说,我有以下输入...

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/

相关文章:

python - 启动通过套接字编程处理 HTTP 请求的 python 脚本时,CPU 达到 100%?

python - 支持思科路由器,使用 NAPALM,使用 SSH 远程登录

python - 将标签数组映射到 pandas 系列中的值

ruby - 将 Perl 字符串替换移植到 Ruby?

regex - BigQuery REGEXP_MATCH 和口音 : boundary wildcard fails?

regex - 如何在复制 vfat 期间重命名文件

javascript - 使用正则表达式按空格和逗号分割字符串

python - zc.buildout 版本

python - 如何对以下内容进行矢量化,追加可能是瓶颈

java - 使用正则表达式从操作数中拆分并提取运算符