>>>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正确的正则表达式应该是什么样的?
2 回答
慕慕森
TA贡献1856条经验 获得超17个赞
可以试下代码:RE_FUNCTION_PARAM_NAME='[,(;]\s*(.*?)\s*(?=[\,:])'原来的正则失败,原因在于后面的[\,:],因为正则在匹配的过程中,会有一个消费字符的过程,意思就是说,假设我匹配的这个字符,不管这个字符是不是我想要的,我都是消费了,在下次匹配就不会重复考虑,所以我用了零宽断言,这样就能光匹配但不消费,所以上一轮用于匹配的字符,在下一轮还能够继续使用
添加回答
举报
0/150
提交
取消