免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3247 | 回复: 7

字符串匹配 [复制链接]

论坛徽章:
0
发表于 2012-10-15 19:34 |显示全部楼层
本帖最后由 怪怪虎 于 2012-10-15 21:29 编辑

想用一个正则表达式只匹配 含有 IPv4 Subnet ID 的字符串.
其中不区分大小写, 字符中间有空格的,都算能匹配. 比如字符串"ipv4      subnet    id",这种字符串也能匹配.
像知道这样的正则表达式如何写?
我写的是regex=r'^ipv4\s+subnet\s+id$', 结果不工作.

如果输入是以下字符串, 像只匹配第一个,别的不匹配.
IPv4 Subnet ID
IPv4 Subnet Name
IPv4 Gateway
IPv4 Network Mask
IPv4 Subnet Base
IPv4 Phisical Interface
IPv4 Phisical Interface

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
发表于 2012-10-15 20:55 |显示全部楼层
你的描述让人无法理解, 自己再组织组织吧.

论坛徽章:
0
发表于 2012-10-15 22:11 |显示全部楼层
本帖最后由 luoyan_xy 于 2012-10-15 22:12 编辑

你所说的想要匹配的结果跟你写的测试代码是不一样的,假如要匹配包含“IPv4 Subnet ID”的字符串,并不区分大小写的话,只需要加上不区分大小写的标志即可。
  1. >>> s = '''
  2. ... IPv4 Subnet ID
  3. ... IPv4 Network Mask
  4. ... IPv4 Subnet Name
  5. ... IPv4 Gateway
  6. ... IPv4 Network Mask
  7. ... IPv4 Subnet Base
  8. ... IPv4 Phisical Interface
  9. ... IPv4 Phisical Interface
  10. ... '''
  11. >>>
  12. >>> import re
  13. >>> m = re.compile(r'ipv4\s+subnet\s+id',re.I)
  14. >>> print m.findall(s)
  15. ['IPv4 Subnet ID']
复制代码
估计你的问题在于少加了re.I标志

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
发表于 2012-10-15 22:52 |显示全部楼层
楼主不要提问了之后再编辑, 服了.

论坛徽章:
0
发表于 2012-10-16 20:22 |显示全部楼层
本帖最后由 怪怪虎 于 2012-10-16 20:23 编辑

你说描述的不清楚,我就编辑了下,如果编辑后,你还觉得不好理解,你就说哪里不好理解,目的是找到我要得到的答案.我不理解,我为什么不能在修改原帖.回复 4# linux_c_py_php


   

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
发表于 2012-10-16 20:41 |显示全部楼层
你先丢个错的上去, 别人看完了回复了, 你又改成对的, 后边人又回复, 这就乱套了.

论坛徽章:
0
发表于 2012-10-16 20:54 |显示全部楼层
你说的是有道理的,可是这个帖子,在你提出异议后,我就更新了,而且在更新之前,没人对帖子进行解答. 这也是我直接更新帖子的原因.否则我会有帖子提示说,问的问题已更新.

假设,有人提出问题描述不清,而且帖子继续不更新,那导致什么样的后果. 一人一个说法,那问题还能解决吗

我承认,我第一次确实描述的不好, 希望这次描述的别人能看懂.

回复 6# linux_c_py_php


   

论坛徽章:
0
发表于 2012-10-16 21:11 |显示全部楼层
刚才测试了下, 可以只匹配自己想要的那个字符串.  记得昨天晚上也是这么写的,不知道当时哪里搞错了,愣是把所有的都给匹配上了.
   for rownum in range(sh0.nrows):
     str0=sh0.cell(rownum,0).value
     str0=str0.strip()   <<< str0就是我上边列出的每个字符串.
     if re.match(r'ipv4\s+subnet\s+id',str0,re.I):
       print str0     <<< 现在可以只输出 IPv4 Subnet ID

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP