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

查看:107
本文介绍了python - 正则表达式解析结果和预期不符,但看不出错在哪里了的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

>>> import re
>>> RE_FUNCTION_PARAM_NAME = '[\,\(;]\s*(.*?)\s*[\,:]'
>>> testStr = 'function Func(i: Integer; s1, s2,s3,s4: string): Boolean;'
>>> pattern = re.compile(RE_FUNCTION_PARAM_NAME)
>>> print pattern.findall(testStr)
['i', 's1', 's3']
>>> 

上面这段Python脚本,希望解析出testStr中的i、s1、s2、s3、s4

但是实际解析结果只有i、s1、s3

正确的正则表达式应该是什么样的?

解决方案

可以使用'[,(;]\s*(.*?)\s*(?=[,:])'

,(;:[]里面不是特殊字符,所以不用转义,当然转义了也没事;
你的正则的问题是正则最后会匹配一个逗号或者分号,所以下次匹配是从逗号或者分号的位置之后匹配的,所以当匹配成功s1之后,是从 s2,s3,s4: string): Boolean;'这个位置开始匹配的,因为开头的,号已经被s1匹配走了,所以下一次匹配是从s2后面的逗号开始的,所以s2匹配不上,同理s4前面的逗号让s3匹配走了,所以s4没有匹配上。

所以,我用断言匹配后面的逗号或分号。

Update1:
不用断言,可以使用这个

'[,(;]\s*([^,:\s)]+)'

因为变量名后面是空格或者逗号或者冒号或右括号,所以匹配的时候匹配[^,:\s]+,即一到多个非空格,逗号,冒号和右括号的字符就行了。

这篇关于python - 正则表达式解析结果和预期不符,但看不出错在哪里了的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆