python——正则表达式
- 1、简介
- 2、常用的元字符
- 3、常用表达式举例
- 4、运算符优先级
- 5、常用正则表达式
- 6、python 正则的简单使用
-
- 6.1 贪婪模式与非贪婪模式
- 6.2 转义字符的使用
- 6.3 除了换行符之外的匹配(想匹配换行符需添加修饰符)
- 6.4 纯数字的正则
- 6.5 匹配判断的方法
- 6.6 范围运算 [123] [1-9]
- 6.7 正则的方法
1、简介
- 正则表达式是对字符串(包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为“元字符”))操作的一种逻辑公式,
- 就是用事先定义好的一些特定字符、及这些特定字符的组合,组成一个“规则字符串”,这个“规则字符串”用来表达对字符串的一种过滤逻辑。
- 正则表达式是一种文本模式,该模式描述在搜索文本时要匹配的一个或多个字符串。
2、常用的元字符
元字符 |
含义 |
\ |
转义字符 |
. |
匹配除换行(\n)以外的所有字符 |
^ |
匹配字符串的开始位置,在集合([])中表示“非” |
$ |
匹配字符串的结束位置 |
? |
匹配前面的子表达式0次或1次 |
* |
匹配前面的子表达式0次或多次 |
+ |
匹配前面的子表达式至少1次 |
() |
标记一个子表达式的开始和结束位置,其结束符号")"是元字符 |
[] |
字符组的起始符号,其结束符号"]"不是元字符 |
{} |
标记限定符的开始,其结束符号"}"不是元字符 |
| |
表示或 |
3、常用表达式举例
表达式 |
含义 |
\w |
匹配字母、数字、下划线 |
\W |
匹配非字母、数字、下划线 |
\d |
匹配数字 |
\D |
匹配非数字 |
\b |
匹配单词的开始或结束 |
\B |
匹配非单词的开始或结束 |
\s |
匹配任何空白字符 如回车、空格、制表符等 [\f\n\r\t\v] |
\S |
匹配任何非空白字符 |
{n} |
匹配前面子表达式n次 |
{n,m} |
匹配前面子表达式n到m次 |
{n,} |
匹配前面子表达式n次以上 |
[xyz] |
表示字符集,匹配所包含的任意字符 |
[a-z] |
表示字符范围,能匹配范围内的任意字符 |
(abc) |
组合,将这n个项组合为一个单元,可以对这n个单元使用限定符 |
4、运算符优先级
运算符 |
优先级 |
说明 |
\ |
最高 |
转义字符 |
() (?: ) (?=) [] |
高 |
圆括号和方括号 |
* + ? {n} {n,} {n,m} |
中 |
限定符 |
^ $ \ 任何元字符 任何字符 |
低 |
定位符和序列 |
| |
最低 |
或 |
5、常用正则表达式
1、汉字:^[\u4e00-\u9fa5]{0,}$
2、英文和数字:^[A-Za-z0-9]+$
3、由数字、26个英文字母或者下划线组成的字符串:^\w+$
4、中文、英文、数字包括下划线:^[\u4e00-\u9fa5A-Za-z0-9_]+$
5、Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
6、InternetURL: ^https://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
6、python 正则的简单使用
正则里面严格区分大小写
import re
6.1 贪婪模式与非贪婪模式
one = "m123456npkdaaidjifn"
pattern = re.compile("^m(.*)n$")# 贪婪模式
pattern.findall(one) # findall 返回列表
pattern = re.compile("^m(.*?)n$") # 非贪婪模式
pattern.findall(one)
6.2 转义字符的使用
one = "a\n"
pattern = re.compile("a\\n")
pattern.findall(one)
6.3 除了换行符之外的匹配(想匹配换行符需添加修饰符)
one = """
mshfsafjsahfsdsdn
1231564684899848n
"""
pattern = re.compile("m(.*)n")
pattern.findall(one)
pattern = re.compile("m(.*)n",re.S) # 添加修饰符会匹配换行符
pattern.findall(one)
one = """
mshfsafjsahfsdsdN
1231564684899848N
"""
pattern = re.compile("m(.*)n",re.I) # 添加修饰符忽略大小写
pattern.findall(one)
6.4 纯数字的正则
one = "12344569878"
pattern = re.compile("\d")
pattern.findall(one)
6.5 匹配判断的方法
one = "1234a"
pattern = re.compile("\d+")
result = pattern.match(one) # 返回是否匹配成功 并且从头开始匹配
result.group()
6.6 范围运算 [123] [1-9]
one = "123456"
pattern = re.compile("[123]")
pattern.findall(one)
pattern = re.compile("[1-9]")
pattern.findall(one)
6.7 正则的方法
- findall:查找符合正则的内容 并返回列表
- match:从头头匹配 匹配一次 返回匹配是否成功的结果
- search:从任意位置匹配一次 返回匹配是否成功的结果
- sub:替换字符串
- split:拆分字符串
one = "123abc"
pattern = re.compile("\d+")
# match
pattern.match(one)
two = "abc123"
pattern.match(two)
# search
result = pattern.search(two)
result.group()
# findall
pattern.findall(one)
# sub
pattern.sub("wj",one) # 第一个参数为要替换后的内容 第二个参数为替换前的内容
# split
three = "abc 123"
pattern = re.compile(" ")
pattern.split(three) # 返回结果为列表