Chinaunix

标题: 求解一个python正则表达式问题 [打印本页]

作者: hrdxwandg    时间: 2012-05-15 14:07
标题: 求解一个python正则表达式问题
本帖最后由 hrdxwandg 于 2012-05-15 19:17 编辑

import re
cr = re.compile("怎么写呢")
s = "abcd123d123ad1v123"
print cr.findall(s)

我想找出以a开头,以123字符串结尾,但是中间不出现123这个字符串的字符串。
比如上题,结果应为:abcd123和ad1v123。

请教大侠这个正则该如何写呢?

先谢谢各位了~
----------------------------------------------------------------------------------------
以上问题解决了,还有一个相反问题:
import re
cr = re.compile("怎么写呢")
s = "a123abvpd123d“p”f12ab123sabd123f1123abc"
print cr.findall(s)

我想找出以123字符串开头,以ab字符串结尾,但是中间不出现123和“p”这两个字符串的子字符串。
比如上题,结果应为:123ab和123sab和123ab。

再次请教,谢谢了~
作者: yinyuemi    时间: 2012-05-15 14:50
re: a.*?123
作者: hrdxwandg    时间: 2012-05-15 15:44
回复 2# yinyuemi


这个不行~要求不能出现123这整个字符串,而不是1或2或3

   
作者: anonymous0502    时间: 2012-05-15 16:05
hrdxwandg 发表于 2012-05-15 15:44
回复 2# yinyuemi


>>> v=re.findall('a.*?123',"abcd123d123ad1v123")
>>> v
['abcd123', 'ad1v123']

这不是你举例要的结果吗?

作者: jackliu8722    时间: 2012-05-15 17:00
一楼正解,正解啊,正解啊,正解 啊
作者: hrdxwandg    时间: 2012-05-15 18:44
回复 2# yinyuemi

不好意思啊,我弄错了。
谢谢啊~


   
作者: hrdxwandg    时间: 2012-05-15 19:19
回复 2# yinyuemi

不好意思,再次请教了~谢谢~


   
作者: luoyan_xy    时间: 2012-05-15 23:33
回复 1# hrdxwandg


    import re
    m = re.compile(r"123[^p]*?ab")
    print m.findall(s)
作者: hrdxwandg    时间: 2012-05-16 08:35
回复 10# luoyan_xy

这个我验证了下,不行额~


   
作者: luoyan_xy    时间: 2012-05-16 21:00
  import re
    m = re.compile(r"123[^p | 123]*?ab")
    print m.findall(s)
作者: whosy    时间: 2012-05-17 08:38
10楼正确,表达式就是 re.compile("123[^p|123]*?ab")
作者: whosy    时间: 2012-05-17 08:41
本帖最后由 whosy 于 2012-05-17 08:43 编辑

10楼正确,表达式就是re.compile("123[^p|123]*?ab")

浏览器卡,重复提交了
作者: hrdxwandg    时间: 2012-05-17 14:22
回复 12# luoyan_xy

谢谢~


   
作者: hrdxwandg    时间: 2012-05-17 14:23
回复 14# whosy

谢谢~


   
作者: gegebao    时间: 2012-05-25 11:06
回复 2# yinyuemi


        p1 = "a(?:.(?<!123))*123"
        p2 = "123(?:.(?<!123)(?<!p))*ab"

作者: qmhlan    时间: 2012-05-29 10:33
找出以123字符串开头,以ab字符串结尾,但是中间不出现123和“p”这两个字符串的子字符串。
正则表达式: ^123[^123|^p]ab

找出以a开头,以123字符串结尾,但是中间不出现123这个字符串的字符串。
正则表达式:^a[^123]123
作者: luoyan_xy    时间: 2012-06-18 19:32
回复 16# hrdxwandg


    之前写的那个正则表达式是有问题的,[^p|123]的意思并不是字面上理解的 非p 或者 非123,而是非1,非2,非3,在你给的例子中碰巧没有问题而已,
如果在123和ab之前有1、2、3之中的任意一个都会导致匹配不上,这就不正确了

    在网上看到一种写法可以,但不知是不是最简: m = re.compile(r'123(??!123|p).)*?ab')   ,这样才正确。。。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2