以字母开头长度大于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:
一、我爱正则表达式:
因为它很有用
二、我讨厌正则表达式:
因为他又时候很烦
有时候写太麻烦
三、苦逼得程序员
你让我感到很惆怅
我不喜欢程序员