【BOOK】正则表达式

正则表达式

1、 开源中国—正则表达式测试工具:https://tool.oschina.net/regex/

2、 匹配规则

 

 

 

3、 match()

从字符串起始位置匹配正则表达式

若从起始位置匹配不到则返回None

 

※目标匹配:在正则表达式中加(),就可以根据括号位置获得匹配到的部分内容

 

※通用匹配

  . 匹配初换行符以外的所有字符
  * 匹配前面字符的无限次
  .* 匹配任意字符

import re

content = 'Hello 123 4567 World_lalalalalalal ooo gugu'
# ^Hello:以Hello开头; \s:空格; \d:数字;\w{5}:5个字符或下划线
result = re.match('^Hello\s(\d\d\d)\s\d{4}\s(\w{5})', content)
print(result)
#<re.Match object; span=(0, 20), match='Hello 123 4567 World'>
print(result.group())
# Hello 123 4567 World,匹配结果
print(result.span())
#(0, 20),匹配的范围

## 匹配目标
print(result.group(1)) #123,正则表达式中被括号起来的第1部分
print(result.group(2)) #World,正则表达式中被括号起来的第2部分

## 通用匹配
# .匹配初换行符以外的所有字符
# *匹配前面字符的无限次
# .*匹配任意字符
re1 = re.match('^Hello.*gugu$', content) ##匹配到整个字符
print(re1.group())

  

※贪婪和非贪婪

        .*  贪婪匹配,匹配尽可能多的字符

  .*? 非贪婪匹配,匹配尽可能少的字符

尽可能使用非贪婪匹配,避免出现匹配缺失的情况

.*? 用在字符结尾可能匹配不到任何内容

import re

content = 'Hello 1234567 World_lalalalalalal ooo gugu'
result = re.match('^He.*(\d+).*gu$', content)
print(result.group(1)) #7
## 贪婪匹配初最后一个数字 7 以外,其余全部匹配到 .* 里面了

result1 = re.match('^He.*?(\d+).*gugu$', content)
print(result1.group(1)) #1234567

  

※修饰符

 

 

※转义匹配

     字符串组包含了 . * ^等特殊字符需要匹配时,在这些特殊字符前面加 \

import re

content = '(百度)www.baidu.com'
result = re.match('\(百度\)\w{3}\.\w{5}\..*', content)
print(result.group()) ## 匹配 . () 时前面要加 \

  

4、 search()

匹配时扫描整个字符串,返回第一个成功匹配的结果

 

import re
content = 'Kollo 1234 mm lasokumawali 3434 yaya'
re1 = re.search('mm.*?ya', content)
print(re1.group())

  

5、 findall()

匹配时扫描整个字符串,返回所有成功匹配的结果

返回列表类型,for in循环遍历

 

6、 sub()

去掉一些无关内容,简化findall()的正则表达式

 

import re

content = 'be485a563u85ti544ful45545'
result = re.sub('\d+', '', content)
print(result) #beautiful ,去掉字符中的所有数字

  

7、 compile()

将正则表达式字符串编译成正则表达式对象,可以在后续匹配中进行复用

import re

con1 = '2019-12-06 12:12'
con2 = '2020-11-12 03:12'
con3 = '2022-03-22 19:45'
pattern = re.compile('\d{2}:\d{2}') ## 编译 正则表达式对象
#去掉时间,保留日期
res1 = re.sub(pattern, '', con1)
res2 = re.sub(pattern, '', con2)
res3 = re.sub(pattern, '', con3)
print(res1, res2, res3)
# 2019-12-06  2020-11-12  2022-03-22

  

 

posted @ 2020-03-08 21:48  kuluma  阅读(223)  评论(0编辑  收藏  举报