day17总结

正则表达式

正则表达式就是做字符串匹配的一种工具,很多语言都支持正则语法。正则语法是通用的
python中通过re模块中提供的方法使用正则
如果不匹配结果是None, 匹配结果是一个匹配对象
python正则表达式 -- r'正则'
js正则表达式 -- /正则/

正则表达式的作用:
通过使用正则表达式,可以:
···
测试字符串内的模式。例如,可以测试输入字符串,以查看字符串内是否出现电话号码模式或信用卡号码模式。这称为数据验证。
替换文本。可以使用正则表达式来识别文档中的特定文本,完全删除该文本或者用其他文本替换它。
基于模式匹配从字符串中提取子字符串。可以查找文档内或输入域内特定的文本。
···

1.匹配字符的符号

1.1 普通字符 -- 普通字符在正则中代表字符本身。eg: a, b, 1. etc

re_str = r'hello'
result = re.fullmatch(re_str, 'hello')

1.2 . -- 任意匹配一个除换行符\n以外的字符

re_str = r'a.c'
result = re.fullmatch(re_str, 'a好c')

1.3 \s -- 匹配任意的空白符,包括空格,制表符(Tab),换行符,中文全角空格等

re_str = r'...\s\s...'
result = re.fullmatch(re_str, '你好吗 \n我很好')

1.4. \w -- 匹配字母或数字或下划线或汉字等

re_str = r'\wabc'
result = re.fullmatch(re_str, '_abc')

1.5 \d -- (匹配任意数字,等价于 [0-9])

re_str = r'\d\dabc'
result = re.fullmatch(re_str, '12abc')

1.6. \W -- (非数字、字母、下划线)

1.7. \S -- (非空白字符)

1.8. \D --(非数字字符)

1.9 [] --(匹配字符集中的一个)
a.[普通字符集] -- 匹配字符集中的一个
b.[字符1-字符2] -- 匹配字符1到字符2的任意一个字符(要求字符1的编码值小于字符2)
[0-9] -- 匹配所有的数字
[a-z] -- 匹配所有的小写字母
[A-Z] -- 匹配所有的大写字母
[a-zA-Z] -- 匹配所有的字母
[\da-zA-Z] -- 匹配数字、字母、下划线
[\u4e00-\u9fa5] -- 匹配中文

注意:一个[]只能匹配一个字符

1.10 [^] -- 匹配不在字符集里的任意一个字符
例如:[^aeiou] -- 除aeiou以外的其他字符

2.检测字符的符号

2.1 \b -- 检查单词边界,匹配单词的开始或结束,只匹配一个位置,即字与空格间的位置。
正则表达式里的单词:就是不少于一个的连续的\w

re_str = r'[a-z]{3} \b[a-z]{3}\b'
result = re.fullmatch(re_str, 'hhh hhh')

2.2 ^ -- 匹配字符串的开始

re_str = r'^[abc]123'
result = re.fullmatch(re_str, 'a123')

2.3 $ -- 匹配字符串的结束

re_str = r'abc$'
result = re.fullmatch(re_str, 'abc')

3.转义符号

除了^放在[]开头,和-放在两个字符之间以外,其他单独的特殊符号,在[]没有特殊功能都在表示字符本身

转义符号:通过在正则有特殊功能、意义的符号前加\,让这个正则符号变成普通符号

^在[]中不是在括号内的开头就没有特殊意义

-在[]中,只要不是放在两个字符之间都表示-本身

4.匹配次数的限定符(贪婪)

4.1 * -- (匹配0次或多次)
4.2 + -- 重复一次或更多次
4.3 ? -- 重复零次或一次
4.4 {n} -- 重复n次
4.5 {n,} -- 重复n次或更多次
4.6 {n,m} -- 重复n到m次

贪婪 -- 匹配次数不确定的时候尽可能多的匹配(上面次数不确定的符号都是贪婪的)
懒惰-- 匹配次数不确定的时候尽可能少的匹配(次数不确定的符号后面加?就会变成非贪婪)

5.匹配次数的限定符(懒惰)

5.1 *? -- (匹配0次或多次)
5.2 +? -- 重复一次或更多次
5.3 ?? -- 重复零次或一次
5.4 {n}? -- 重复n次
5.5 {n,}? -- 重复n次或更多次
5.6 {n,m}? -- 重复n到m次

6.分支和分组

6.1 分支 |
正则1|正则2 - 先用正则1进行匹配,如果匹配失败再用正则2匹配(正则1和正则2中只要有一个匹配成功就成功两个失败就失败)

注意:如果正则1匹配成功了,不会再使用正则2去匹配
使用分枝条件时,要注意各个条件的顺序。

6.2 分组()
1.整体区分
re_str = r'(xxx|yyy)[a-z]{2}
2.整体操作
re_str = r'(xxx){2}
3.重复操作
\n -- 重复前面第n个分组匹配到的内容
re_str = '(\d\d)abc\1''

7.正则表达式中的方法

7.1 compile(正则表达式) -- 创建正则表达式对象

7.2 fullmatch -- 完全匹配
fullmatch(正则表达式,字符串) -- 让正则和字符串完全匹配;匹配失败返回None, 匹配成功返回匹配对象

对整个字符串进行检查的时候使用,比如判断账号、密码是否合法;手机号邮箱是否合法

result = fullmatch(r'\d{3}[a-z]{2}[A-Z]{3}', '234anASH')
print(result)

7.3 match -- 匹配字符串开头
match(正则表达式,字符串) -- 让正则和字符串开头完全匹配;匹配失败返回None, 匹配成功返回匹配对象

result = match(r'\d{3}', '234ajgy')

7.4 search -- 字符串查找
search(正则表达式,字符串) -- 在字符串中找到第一个和正则表达式匹配的子串;没有匹配到就返回None, 匹配成功返回匹配对象

result = search(r'a(\d{3})([a-z]){2}', 'sda278zakjijieh')
# 通过匹配结果能拿到的东西
# a.匹配结果
print(result.group())  # 获取整个正则表达式匹配到的结果
print(result.group(1)) # 获取第一个分组匹配到的结果

# b.匹配范围(被匹配到的内容在元字符串中的范围)
print(result.span())
print(result.start())
print(result.end())

# c.获取原字符串
print(result.string)

7.5 split - 字符串切割
split(正则表达式,字符串,切割次数) -- 将字符串按照满足正则表达式的子串进行切割
切割次数不传参就全切

print(sub('sh2nskf2jzlqpe5urcm', '*', r'\d',))

7.6 sub - 字符串替换
sub(正则表达式,新字符串,原字符串,替换次数) -- 将元字符串中满足正则表达式的子串替换成新字符串
替换次数 - 不传参就全部替换

print(sub('sh2nskf2jzlqpe5urcm', '*', r'\d',))

7.7. findall() - 查找所有
findall(正则表达式,字符串) -- 在字符串中查找所有满足正则表达式的子串,以列的形式返回
有一个分组,只取分组匹配到的内容

print(findall(r'(\d)a', 'ash3hhcn327ajh8ahkk23'))

注意:使用findall的时候,如果有分组想要取整个正则匹配的结果是取不到

print(findall(r'(\d+)([a-z]{2})', 'ash3hhcn327ajh8ahkk23'))

7.8. finditer - 查找所有
finditer(正则表达式,字符串) -- 在字符串中查找所有满足正则表达式的子串;
返回一个迭代器,元素是每个子串对应的匹配对象

result = finditer(r'(\d[a-z]){3}\+', 'ashs8s7h9jsjshd9k0sl2q3s4jksdf')
for x in result:
    print(x.group(), x.group(1))
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 01.正则基本符号 1.什么是正则表达式 正则表达式就是字符匹配的工具;是由正则符号和普通字符组成,来匹配不同规律...
    Gary134阅读 604评论 0 0
  • 1.什么是正则 正则表达式就是字符匹配的工具;是由正则符号和普通字符组成,来匹配不同规律的字符串 2.python...
    年華盡耗_c24e阅读 254评论 0 0
  • import re'''正则表达式就是做字符串匹配的一种工具,很多语言都支持正则语法,正则语法是通用的。 pyth...
    小逗比的奋斗史阅读 554评论 0 0
  • 1.正则表达式就是做字符串匹配一种工具,很多语言都支持正则语法。正则语法是通用的 python中通过re模块中提供...
    __e145阅读 254评论 0 0
  • 正则表达式 1.什么是正则表达式(语法通用)正则就是一种用来做字符串匹配的工具,通过不同的符号匹配不同的字符 2....
    xue_y阅读 211评论 0 0

友情链接更多精彩内容