正则表达式---12.1

2017-12-01  本文已影响0人  a荷包蛋

(一)定义

正则表达式是对字符串(包括普通字符(例如,a 到 z之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。正则表达式是一种文本模式,模式描述在搜索文本时要匹配的一个或多个字符

               1.“ . ”------------用法

importre

# '.'---匹配任意一个字符,除了(\n)

#match ---从头查找  *代表所有

ret=re.match('.*','fdsgfh')

print(ret)

2.” 【 】”--------用法

#[a-z]可以表示范围,[adsfd]--符合其中一个就可以

ret=re.match('[a-z]','adf')

print(ret)

print(ret.group())

3. \d---匹配数字   \D---匹配非数字

ret=re.match('\d','1adf')

print(ret)

print(ret.group())

#第二种

ret=re.match('\D','1BBdf')

print(ret)

print(ret.group())

4.\s--匹配空白 tab键   \S匹配非空白

ret=re.match('\s',' 1BBdf')

print(ret)

print(ret.group())

print('............................')

ret=re.match(r'\s','\t1BBdf')

print(ret)

print(ret.group())

print('................................')

ret=re.match(r'\S','1BBdf')

print(ret)

print(ret.group())

5.\w---匹配单词字符   \W---匹配非单词字符

#w---匹配单词字符 后面的re.A---限制只能使用ascii 码里的字符(除了中文)

ret=re.match('\w','中5cdf',re.A)

print(ret)

print(ret.group())

#'W'---匹配非单词字符---只能识别一些符号例如(),。

ret=re.match('\W','5cdf',re.A)

print(ret)

print(ret.group())

#但是后面加上re.A 可以识别中文

ret=re.match('\W','中5cdf',re.A)

print(ret)

print(ret.group())

6.[\u4e00-\u9fa5]----直接匹配中文

ret=re.match('[\u4e00-\u9fa5]','中国')

print(ret)

(二)---表示数量

1.‘*’

#"*"---只能取它前面的那个字符,尽可能的取到它出现的所有

ret=re.match('aw*','aawwdfs')

print(ret)

print(ret.group())

2.“ +”

# '+'---仅匹配它前面的一个字符,至少出现一次

# ret=re.match('aw+','aawwdfs')

# print(ret)

# print(ret.group())

#像以上代码会报错,因为a匹配到,但是w一次也没有

# ret=re.match('aaw+','aawwdfs')

# print(ret)

# print(ret.group())

3. “?”

#'?'---仅匹配它前面的一个字符,出现次数可以<=1

#所以它前面那个字符如果没有就不会报错

ret=re.match('aw?','aawwdfs')

print(ret)

print(ret.group()

4.{m}  {m,} {m,n}

'{m}'---仅匹配它前面的一个字符,出现次数可以m次

 ret=re.match('aaw{1}','aawwdfs')

 print(ret)

 print(ret.group())

'{m,}'---仅匹配它前面的一个字符,出现次数可以>m次

 ret=re.match('aaw{2,}','aawwwdfs')

 print(ret)

 print(ret.group())

'{m,n}'---仅匹配它前面的一个字符,出现次数可以m

 ret=re.match('aaw{2,5}','aawwwdfs')

 print(ret)

 print(ret.group())

(三)------边界

1.“ ^ ”

把“^”---写到列表里是除了哪些内容,剩下的

 ret=re.match('[^a-z]','1aawwdfs')

 print(ret)

 print(ret.group())

2."$"

#$---限制字符以什么结尾 ^---跟match 相同

while True:

emil=input('--')

ret=re.search('^[a-zA-Z0-9]+@168.com$',emil)

print(ret)

3."\b"

#\b------匹配单词的边界

ret=re.match(r'who\b','who am i')

print(ret)

ret=re.match(r'who\s','who am i')

print(ret)

#假如说who后面有数不过来的空格

ret=re.match(r'who\b\s*','who  am i')

print(ret)

#匹配中文的边界,注意边界字符串间一定要用空格隔开

ret=re.match(r'我\b','我 是谁')

print(ret)

#不加空格,返回的就是None

ret=re.match(r'我\b','我是谁')

print(ret)

(四)分组

#因为?前匹配可以是一个也可以是零个,所以把8分给\d

#在正则里面加小括号可以分组 从1开始

ret = re.match("([1-9]?)(\d)","8")

print(ret.group(1))

print(ret.group(2))

ret = re.match("([1-9]?)(\d)","80")

print(ret.group(1))

print(ret.group(2))

“ | ”------或者

"|"---表示或者,一般前面满足结果就是前面 第三种情况前面满足不了输出是None,所以结果是None

ret = re.match("[1-9]?\d$|100","8")

print(ret)

ret = re.match("[1-9]?\d$|100","78")

print(ret)

ret = re.match("[1-9]?\d$|100","08")

print(ret)

(五)高级用法

1.#compile函数用于编译正则表达式,生成一个 Pattern 对象

#用这个对象.match( )括号里只放字符串就好

pattern =re.compile('a+')

info='abbb'

ret=pattern.match(info)

print(ret)

2.search方法用于查找字符串的任何位置,它也是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果

3.match如上,不过他是从头查找

4.findall  

#findall

上面的 match 和 search 方法都是一次匹配,只要找到了一个匹配的结果就返回。然而,在大多数时候,我们需要搜索整个字符串,所以用findall获得所有匹配的结果,并生成列表  

 pattern = re.compile(r'\d+')  # 查找数字

 result1 = pattern.findall('hello 123456 789')

# 0-10  确定范围

 result2 = pattern.findall('one1two2three3four4', 0, 10)

 print(result1)

 print(result2)

5.finditer

# #finditer---和findall相似也是搜索整个字符串。不过最后可以生成一个迭代器

pattern = re.compile(r'\w+')

result2 = pattern.finditer('one1two2three3four4', 0, 10)

print(result2)

for i in result2:

print(i.group())

6.sub-----替换

info='hello 123,hello xiaocui'

ret=re.sub(r'(\w+) (\w+)',r'\2 \1',info)

print(ret)

7.split----分割

ret=re.split(':| +','sd:dsf Fds')

print(ret)

8.贪婪/非贪婪

#贪婪  程序默认为贪婪

s="This is a number 234-235-22-423"

ret = re.match(r"(.+)(\d+-\d+-\d+-\d+)",s)

print(ret)

print(ret.group())

print(ret.group(1))

print(ret.group(2))

s="This is a number 234-235-22-423"

ret = re.match(r"(.+?)(\d+-\d+-\d+-\d+)",s) #加?变为非贪婪

print(ret)

print(ret.group())

print(ret.group(1))

print(ret.group(2))

ret=re.match(r'(\w)+(\s)+','ask jh f   kj')

print(ret)

print(ret.start())

print(ret.span(2))

print(ret.start(2))

print(ret.group(1))

print(ret.group(2))

上一篇下一篇

猜你喜欢

热点阅读