不太好说清楚,直接上例子吧
对于这样一行文本:
l = "have(message, 'aaa-bbb', 'ccc-ddd') && have(outcome, 'access-accepted')"
假如我想匹配have(message,...)中的"aaa-bbb"和"ccc-ddd", 不要匹配have(outcome,...)中的字符,应该怎么写呢?
1.
re.findall("(\w+(?:\-\w+)+)", l)
是不行的,因为会匹配到have(outcome,...)里的字符
2.
re.findall("have\(message,\s*[^\)]*?(\w+(?:\-\w+)+)", l)
这个也不行,只能匹配到第一个
3.
re.findall("have\(\message\(?:,\s*\'(.+?)\'\s*)+\s*\)",l)
这样也不行,也是只能到匹配第一个
实在想不出什么办法了, 有大神知道吗?