正则表达式
时间:2019-09-16
本文章向大家介绍正则表达式,主要包括正则表达式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
规则
元字符
1. 匹配字符
- . 匹配任意一个字符
- [] 匹配[]中列举的字符
- \d 匹配数字
- \D 匹配非数字
- \s 匹配空白
- \S 匹配非空白
- \w 匹配配单词(a-z, A-Z, 1-9)
- \W 匹配非单词
2. 匹配数量
- 匹配前一个字符出现0到多次
- 匹配前一个字符至少出现一次
- ? 匹配前一个字符出现0次或者1次,(要么一次, 要么没有) # 注意: 如果?前面是跟的数量,则是取消贪婪
- {m} 匹配前一个字符出现m次, 出现
- {m,} 匹配前一个字符至少出现m次, 至少出现
- {m, n} 匹配前一个字符出现 m到n次
3. 匹配边界
- ^ 匹配开头
- $ 匹配结尾
- \b 匹配单词边界 (代表单词的开头或结尾, 它只匹配一个位置)
- \B 匹配非单词边界
4. 匹配分组
- | 匹配左右任意一个表达式
- (ab) 将括号中字符作为一个分组
- \num 引用分组num匹配到的字符串
- (?
) 分组起别名 - (?P=name) 引用别名为name分组匹配到的字符串
例子
方法
1. findall方法: 在字符串中找到正则表达式所匹配的所有子串, 并返回一个列表,如果没有找到匹配的, 则返回一个空列表
2. match方法: 尝试从字符串的起始位置匹配一个模式, 匹配成功(只匹配一个)返回的是一个匹配对象(这个对象包含了我们匹配的信息), 如果不是起始位置匹配成功的话, match()返回的是空
3. search方法: 扫描整个字符串, 匹配成功返回的是一个匹配对象 (search也只能匹配到一个, 找到符合规则的就返回, 不会一直往后找)
# 正则匹配
import re
s = '111111111111111111'
# 1. findall
res = re.findall(r'1{2,5}', s) # 注意{2,5} ,逗号后面不能有空格, 即不能{2, 5}
print(res) # ['11111', '11111', '11111', '111'] # 默认是贪婪的,按最多的匹配
res2 = re.findall(r'1{2,5}?', s) # 在数量后面加上问号, 取消贪婪, 即会按照数量最少的匹配
print(res2) # ['11', '11', '11', '11', '11', '11', '11', '11', '11']
# 2. match
res3 = re.match(r'python', 'ipython')
print(res3) # None
# 3. search
res4 = re.search(r'python', 'ipython')
print(res4)
print(res4.group())
my_str = 'hello world hello python hh'
res = re.findall(r'\bhello\b', my_str) # 匹配单词边界
print(res)
# 正则分组
res = re.match(r'<h1>(.*)</h1>', '<h1>itcast匹配分组</h1>')
print(res)
print(res.group()) # 默认是传 0 即 res.group(0)
print(res.group(1)) # group(1) 表示正则匹配中出现的第一组括号中的内容
print(res.groups()) # 拿到全部的分组, 放到一个元组中
# s = '<html><h1>海马itcast</h1></html>'
# res = re.match(r'<.+><.+>.*</.+></.+>', s) # 引出引用分组, 因为这样, 前后的标签不相同也会匹配上
# print(res.group())
s = '<html><h1>海马itcast</h1></html>'
res = re.match(r'<(.+)><(.+)>.*</\2></\1>', s) # \2 引用第二个括号的内容, \1 引用第一个括号匹配到的内容
# print(res.group())
res = re.match(r'<(?P<key1>.+)><(?P<key2>.+).*</(?P=key2)></(?P=key1)>', s)
print('分组起名及引用: res{}'.format(res.group()))
# 匹配邮箱
# a-z A-Z 0-9 _ @163 126 gmail qq . com cn net
p = r'(\w+)@(163|126|gmail|qq)\.(com|cn|net)'
res = re.match(p, '1987719593@qq.com')
print(res)
原文地址:https://www.cnblogs.com/nichengshishaonian/p/11525318.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法