正则表达式解析结果和预期不符,但看不出错在哪里了

>>>importre
>>>RE_FUNCTION_PARAM_NAME='[\,\(;]\s*(.*?)\s*[\,:]'
>>>testStr='functionFunc(i:Integer;s1,s2,s3,s4:string):Boolean;'
>>>pattern=re.compile(RE_FUNCTION_PARAM_NAME)
>>>printpattern.findall(testStr)
['i','s1','s3']
>>>
上面这段Python脚本,希望解析出testStr中的i、s1、s2、s3、s4
但是实际解析结果只有i、s1、s3
正确的正则表达式应该是什么样的?
慕码人2483693
浏览 491回答 2
2回答

慕慕森

可以试下代码:RE_FUNCTION_PARAM_NAME='[,(;]\s*(.*?)\s*(?=[\,:])'原来的正则失败,原因在于后面的[\,:],因为正则在匹配的过程中,会有一个消费字符的过程,意思就是说,假设我匹配的这个字符,不管这个字符是不是我想要的,我都是消费了,在下次匹配就不会重复考虑,所以我用了零宽断言,这样就能光匹配但不消费,所以上一轮用于匹配的字符,在下一轮还能够继续使用
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript