求大神帮忙,形式简单的一个正则匹配,但是我总是获取不到

a11212007310 2016-05-25 10:30:41
下面是python语言写的代码部分,请帮我看看正则表达式。我想获取所有str中“退出费:”后面的值。要求去掉末尾的“;”或“。”:
str1 = "1、参与费:0;2、退出费:0;3、托管费:0.1%;4、固定管理费:0.9%;"
str2 = “2、退出费:不收取退出费"
pattern1 =".*退出费:(.*?)[;。]" -----------》这个表达式只能获取str1里的“退出费”的值,但是获取不到str2的
pattern2 =".*退出费:(.*)"
values1 = re.findall(pattern1,str1)
values2 = re.findall(pattern2,str2)
print json.dumps(values1,ensure_ascii=False)----------------》能正常获取str1里的退出费的值:0
print json.dumps(values2,ensure_ascii=False)----------------》能获取值。但是与pattern1不兼容

目的:想写一个正则表达式,把所有str的指定参数的值都能获取到。求大神指点!谢谢!
...全文
139 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
a11212007310 2016-05-25
  • 打赏
  • 举报
回复
引用 1 楼 imfang 的回复:
没用过python,试试: ".*退出费:([^;。]+)"
现在我又碰到另一种字符串了, str = "参与费率本计划的前端参与费率不超过0.5%。2、退出费率:本计划的退出费率不高于0.5%,随持有期的增加而递减,如下表所示:" 用表达式".*退出费:([^;。]+)“匹配后的值为空。而且这次还要兼容前面的参与费的值,但注意参与费后面没有跟”:“,求指点!!!
a11212007310 2016-05-25
  • 打赏
  • 举报
回复
引用 3 楼 imfang 的回复:
[quote=引用 2 楼 a11212007310 的回复:] [quote=引用 1 楼 imfang 的回复:] 没用过python,试试: ".*退出费:([^;。]+)"
谢谢!你给的这个表达式解决了我的问题。在给你分前,我有个疑问。你这个表达式能解释一下为什么后面跟的是这种([^;。]+)形式,我觉得后面应该是(.*)[;。]?之类的才对吧[/quote] [^abc]表示一个(不是a、b、c的)任意字符[/quote] 还是不太明白。按理说我想要去":"和”;“之间的值,应该是(.*)啊,为什么你后面是以;或。开头,而且至少匹配一次,然后当做一个整体来获取。我觉得后面的”+“号不应该啊,如果有的值后面跟了”;“或”。“ 那岂不是匹配获得的值也包含;和。但是用了你的表达式来匹配,我发现原str串中有;或。的匹配查找后居然没有;或。,这太奇怪了,按理说应该带上;或。的啊
imfang 2016-05-25
  • 打赏
  • 举报
回复
引用 2 楼 a11212007310 的回复:
[quote=引用 1 楼 imfang 的回复:] 没用过python,试试: ".*退出费:([^;。]+)"
谢谢!你给的这个表达式解决了我的问题。在给你分前,我有个疑问。你这个表达式能解释一下为什么后面跟的是这种([^;。]+)形式,我觉得后面应该是(.*)[;。]?之类的才对吧[/quote] [^abc]表示一个(不是a、b、c的)任意字符
a11212007310 2016-05-25
  • 打赏
  • 举报
回复
引用 1 楼 imfang 的回复:
没用过python,试试: ".*退出费:([^;。]+)"
谢谢!你给的这个表达式解决了我的问题。在给你分前,我有个疑问。你这个表达式能解释一下为什么后面跟的是这种([^;。]+)形式,我觉得后面应该是(.*)[;。]?之类的才对吧
imfang 2016-05-25
  • 打赏
  • 举报
回复
没用过python,试试: ".*退出费:([^;。]+)"
爱睡觉的阿狸 2016-05-25
  • 打赏
  • 举报
回复
你可以去Python社区问问
a11212007310 2016-05-25
  • 打赏
  • 举报
回复
引用 1 楼 imfang 的回复:
没用过python,试试: ".*退出费:([^;。]+)"
现在我明白了([^;。]+)的意思了。针对下面的字符串,我也写了一个表达式。但是不知道怎么兼容: str = "参与费率本计划的前端参与费率不超过0.5%。2、退出费率:本计划的退出费率不高于0.5%,随持有期的增加而递减,如下表所示:" pattern1 =".*退出费率(?=:):(.*)" ,我感觉这个还有很大的改进空间。我的目标是把退出费可以更改成任何变量值插进去。费率的“率”有的有,有的没有。求大神指点

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧