Python正则表达式匹配列表,但不包含字典列表

Python正则表达式匹配列表,但不包含字典列表,python,Python,我有一个文本文件,看起来像 logSet1 = [ { log1 = event1, log2 = event2 } ] logSet2 = [ log1, log2 ] 我想写一个只匹配logSet2而不匹配logSet1的正则表达式。我试过了 \= \[[ ]*\n([^\{].*\n)*?[

我有一个文本文件,看起来像

logSet1 = [
                       { log1 = event1,
                         log2 = event2
}
]


logSet2 = [
                         log1,
                         log2
]
我想写一个只匹配logSet2而不匹配logSet1的正则表达式。我试过了

\= \[[ ]*\n([^\{].*\n)*?[ ]*\]\

但这两者都符合。。我认为<代码> [^ { ] 会迫使它与不以“代码> > {< /代码>开头的字符串匹配。

如果您的文件是以编程方式构造的,请考虑将其加载到数据结构中并导航。

对于您的正则表达式本身,您可能希望更熟悉该语言的一些特性

"[ ]*" -- any number of spaces is not great for what you're angling for. Tabs and non breaking white spaces will through you for a loop, as will system differences (\n vs \r vs \r\n). Try just \s*
\w也是你的朋友(单词字符、a-zA-Z0-9和一些标点符号)

因此,我建议:

\w[\w\s]*= \[\s*[\w,\s]*\]
一个单词字符,后跟尽可能多的单词或空格,后跟一个=、一个空格和大括号。“\w[\w\s]*=[”获取“logSet2=[”。然后是尽可能多的空白字符,后跟单词字符、逗号和空格,最后以括号结尾。带有大括号和=的logSet1将永远不匹配


缺点是这是数据,在这里表示为“log1”和“log2”如果使用这些字符,整个正则表达式的方法就会分崩离析。

我会手动逐行解析这个难看的txt文件。如果你喜欢正则表达式,也许可以将其拆分为多个正则表达式。你想支持嵌套列表吗?该文件从何而来?是否已经没有解析器了?这会很奇怪。@woockashek我不支持eed支持嵌套列表。谢谢你的回答。接下来,我的实际内容要比这个复杂得多。每个元素都可能有一堆混乱(不仅仅是
\w\s
)。是否可以根据行是否以
\{
开头进行匹配?然后我建议编写一个日志解析器在“=”+开括号处“侦听”,维护开/关括号堆栈,并在开括号关闭时停止。此时,将整个内容解析为数据结构,而不是使用正则表达式。