regex练习集锦

以字母开头长度大于8且至少包含一个数字的正则表达式字母写法:

[a-zA-Z](?=.*\d.*)[a-zA-Z0-9]{7,}

注意:前向和后向定界符不消耗字符串

2.

import re

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

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

import re
print re.findall(r'a.*?123','abcd123d123ad1v123')

上面使用.*?匹配的原因是:*是贪婪的,所以要使用不贪婪的?进行限定

3.

import re
cr = re.compile("怎么写呢")
s = "a123abvpd123d“p”f12ab123sabd123f1123abc"
print cr.findall(s)
我想找出以123字符串开头,以ab字符串结尾,但是中间不出现123和“p”这两个字符串的子字符串。
比如上题,结果应为:123ab和123sab和123ab。

import re
print re.findall(r'123[^p|123]*1?ab',"a123abvpd123d'p'f12ab123sabd123f1123abc")

import re
print re.findall(r'123(?:(?!123|p).)*?ab',"a123ababvpd123d'p'f12ab123sabd123f1123abc")

 上面第二个是最小匹配!!!

若依然是上题,我想返回以找到以123开头以ab结尾的内容,其中包括ab,但不包括123,若此的返回值为:

import re
    print re.findall(r'(?:123)((?:(?!123).)*?ab)',"a123ababvpd123d'p'f12ab123sabd123f1123abc")

上面用到了正则分组知识,即默认情况下findall返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

4.正则匹配小节:

逆序环视不支持不定长度;

[^(?:123)] 是不包括1、2、3,而不是不包括123整体,总之容易匹配出现123,而不容易匹配不出现123!

5.根据问题,匹配汉字:

如果是一篇论文,有很多观点及阐述:如:
一、我爱正则表达式:
因为它很有用。
二、我讨厌正则表达式:
因为它有时候很烦。
…………………………
…………………………
二十、苦逼程序猿。
你让我感到很惆怅。

怎样用正则表达式把每个观点及其阐述分别list出来?

如['一、我爱正则表达式:\r\n因为它很有用。','二、我讨厌正则表达式:\r\n因为它有时候很烦。']

#!/usr/bin/python
#-*- coding:utf-8 -*-

import re

for i in re.findall(u'[一二三四五六七八九十]+.*',u'一、我爱正则表达式:\n因为它很有用\n二、我讨厌正则表达式:\n因为他又时 候很烦\n有时候写太麻烦\n三、苦逼得程序员\n你让我感到很惆怅\n我不喜欢程序员',re.S):
    print unicode(i)

result:
一、我爱正则表达式:
因为它很有用
二、我讨厌正则表达式:
因为他又时候很烦
有时候写太麻烦
三、苦逼得程序员
你让我感到很惆怅
我不喜欢程序员


转载于:https://my.oschina.net/taisha/blog/60604

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值