为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕码人2483693 2019-05-25 16:22:43
>>>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*(?=[\,:])'
原来的正则失败,原因在于后面的[\,:],因为正则在匹配的过程中,会有一个消费字符的过程,意思就是说,假设我匹配的这个字符,不管这个字符是不是我想要的,我都是消费了,在下次匹配就不会重复考虑,所以我用了零宽断言,这样就能光匹配但不消费,所以上一轮用于匹配的字符,在下一轮还能够继续使用
                            
查看完整回答
反对 回复 2019-05-25
  • 2 回答
  • 0 关注
  • 490 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信