免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1338 | 回复: 3
打印 上一主题 下一主题

【求助,请教】:正则表达式中的“或”'|'的作用域以及“或”和()的冲突。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-06-01 14:46 |只看该作者 |倒序浏览
目前在用python,就用python举例吧。。。

  1. import re
  2. re.search('a|bc','abc')
复制代码
例子举的不太好,我的问题是该行的意思是匹配a或bc 还是匹配ac或bc?

小弟倾向于前者。

那么就出现了另一个问题:如果我想匹配ac或bc怎么办?

  1. import re
  2. re.search('(a|b)c','abc')
复制代码
但是这里又出现了另一个问题:
如果我想提取'c':

  1. import re
  2. re.search('(a|b)(c)','abc').group(1)
复制代码
我忘记这个括号的学名是什么了,但是他的意思就是把匹配的内容提取出来,那么 这个功能和我前面提到的ac,bc问题的()的功能重叠了。


是不是我想的这样的呢?有没有其他的workaroud呢?

例子举的不好,希望已经表达清楚我的疑问了。

期待并感谢大家的解答!谢谢、

论坛徽章:
0
2 [报告]
发表于 2012-06-01 15:31 |只看该作者
已解决。
re.search('(?:a|b)(c)','abc').group(1)
==================================
python 手册:
(?:...)
A non-capturing version of regular parentheses. Matches whatever regular expression is inside the parentheses, but the substring matched by the group cannot be retrieved after performing a match or referenced later in the pattern.


论坛徽章:
0
3 [报告]
发表于 2012-06-01 15:34 |只看该作者
匹配ac或bc可以用[ab]c,方括号中任意取一个字符

论坛徽章:
0
4 [报告]
发表于 2012-06-01 23:22 |只看该作者
回复 1# fzc115100


主要是优先级的问题  
'a|bc' 是bc先串联再和c并联, 串联的优先级要高, 所以匹配a或bc
可以用括号来改变优先级‘(a|b)c' 就匹配 ac或者bc

(?:...) 是非捕获型括号'(?:a|b)(c)' 就只捕获c
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP