免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: ixuh
打印 上一主题 下一主题

来请教一个很难的正则问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-11-01 11:18 |只看该作者
回复 9# a515200


    /(<(?:[^<>]+|(?1))*>)/g

需要perl5.10支持

论坛徽章:
0
12 [报告]
发表于 2010-11-01 11:44 |只看该作者
回复 10# shhgs


看来Perl 5.10 的regex引擎做了加强。具体来说,就是一个group可以引用其外层的group。Py 的 regex引擎没有这个功能。

再说一遍。这个是语法的问题。叫你看编译原理是因为每本编译原理,开头部分都会讲怎么解析语法。如果你觉得我讲的不对,很有可能是你根本不懂。



您全家都是对的,呵呵。

论坛徽章:
0
13 [报告]
发表于 2010-11-01 12:14 |只看该作者
回复  shhgs





您全家都是对的,呵呵。
ixuh 发表于 2010-11-01 11:44



    这个不是请教的态度。拉黑名单了

论坛徽章:
0
14 [报告]
发表于 2010-11-01 20:34 |只看该作者
没有递归的Python正则好纠结~

我使用堆栈的方式解的。代码如下。
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. #
  4. #author:         rex
  5. #blog:           http://iregex.org
  6. #filename        x.py
  7. #created:        2010-11-01 18:25

  8. s='''pig<asdf <123> <abc> <1 <1> > > , <asdf>, <1234>'''

  9. def sharp(s):
  10.     stack=0
  11.     result=[]
  12.     for i in s:
  13.         if stack==0 and i != '<':
  14.             continue
  15.         elif stack==0 and i=='<':
  16.             stack = 1
  17.             result.append(i)
  18.         elif stack==1 and i == '>':
  19.             result.append(i)
  20.             return "".join(result)
  21.         elif stack>0 and i=='>':
  22.             result.append(i)
  23.             stack -= 1
  24.         elif stack>0 and i=='<':
  25.             result.append(i)
  26.             stack += 1
  27.         elif stack >0 and i not in ('>','<'):
  28.             result.append(i)

  29. def all(s):
  30.     while True:
  31.         result=sharp(s)
  32.         if result:
  33.             print result
  34.             index=s.find(result)
  35.             s=s[index+len(result):]
  36.         else:
  37.             break
  38.         
  39. all(s)
复制代码
结果如下:
  1. <asdf <123> <abc> <1 <1> > >
  2. <asdf>
  3. <1234>
复制代码

论坛徽章:
0
15 [报告]
发表于 2010-11-01 22:16 |只看该作者
回复 12# ixuh

与其说这种垃圾话,不如正视你自己的错误。

论坛徽章:
0
16 [报告]
发表于 2010-11-02 09:29 |只看该作者
嗯,用堆栈比较简单。

论坛徽章:
0
17 [报告]
发表于 2010-11-02 10:34 |只看该作者

论坛徽章:
0
18 [报告]
发表于 2010-11-02 11:58 |只看该作者
回复 15# shhgs


    好吧,回来探讨一下。
首先我确实不懂编译原理,我只是一个非计算机专业的初学者而已,如果你是对的,那你就是对的:)
但你真的认为人们需要先去看完并消化理解彻底掌握编译原理后才可以使用正则表达式否则就不应该告诉他答案并批评他根本不懂编译原理还好意思来论坛提问吗?
我可以请教一下你认为人们学习编译原理前应该先看什么书吗?
看那个之前又应该先看什么呢?

虽然看起来像吵架,但我真的只是好奇。

论坛徽章:
0
19 [报告]
发表于 2010-11-02 13:35 |只看该作者
编译原理一般开篇都会讲堆栈和中后缀表达式这些,正则没法处理的情况下正好解决你的问题,他又不是让你全看。。。。。。。。。。。。

论坛徽章:
0
20 [报告]
发表于 2010-11-03 08:12 |只看该作者
回复  shhgs


    好吧,回来探讨一下。
首先我确实不懂编译原理,我只是一个非计算机专业的初学者而 ...
ixuh 发表于 2010-11-02 11:58



我也不是计算机专业的,而且我自学计算机的时候,身边连一个告诉你”要解决这个问题,先去看编译原理“这样的话的人都没有。难道你还不知足?难道要我把代码写好交到你手上?

我这里已经告诉你了,Py的正则没法解决。其实如果单纯解决问题,如果你相信我这个结论,你就应该想其他办法了。楼上有同学给了代码,我没看,也没试,但是即便没有那个代码,你也应该能独立给出实现。否则你的水平,太差了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP