匹配列表的RE是什么?

时间:2018-08-07 18:57:25

标签: python regex

我想知道如何构造正则表达式以提取列表。

这是我的字符串:

audit = "{## audit_filter = ['hostname.*','service.*'] ##}"

这是我的表情:

AUDIT_FILTER_RE = r'([.*])'

这是我的搜索语句:

audit_filter = re.search(AUDIT_FILTER_RE, audit).group(1)

我想提取方括号内的所有内容,包括方括号。 '[...]'

预期输出:

['hostname.*','service.*']

2 个答案:

答案 0 :(得分:1)

import re
audit = "{## audit_filter = ['hostname.*','service.*'] ##}"
print eval(re.findall(r"\[.*\]", audit)[0]) # ['hostname.*', 'service.*']

findall返回字符串匹配列表。在您的情况下,应该只有一个,所以我正在检索索引为0的字符串,它是列表的字符串表示形式。然后,我使用eval(...)将列表的字符串表示形式转换为实际列表。只是要小心:

  • 如果没有匹配项,则... findall ... [0]将抛出列表索引超出范围错误
  • 如果您期望输入来自其他来源(即非您的输入),请不要使用eval(),因为这将是安全问题。

答案 1 :(得分:0)

使用composer require frankforte/quantumphp

例如:

r"\[(.*?)\]"

输出:

import re
audit = "{## audit_filter = ['hostname.*'] ##}"
print(re.findall(r"\[(.*?)\]", audit))