python - 正则表达式解析结果和预期不符,但看不出错在哪里了
本文介绍了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屋!
查看全文