正则表达式(第一课)
定义:即高级文本匹配模式,提供了搜索,替代等功能。本质是由一系列特殊符号和字符组成的字符串,
这个字符串即是正则表达式。这个表达式描述了字符和字符的重复行为,可以匹配一类特征的字符串。
白话一点,正则表达式就是用一个特殊的字符串,对文本文档进行搜索和替换,优点类似于文本文档的 查询功能。只不过这个特殊的字符串是由一系列的特殊符号和字符组成的
下面来说说在python中正则表达式的使用
Python3 中用 re模块 处理正则表达式
re.findall(pattern,string)
功能 : 使用正则表达式匹配字符串参数 : pattern 正则表达式
string 目标字符串
返回值 : 一个列表 匹配到的所有内容
注 意:匹配不到则返回一个空列表 []
元字符 (即正则表达式中有特殊含义的符号)
首先在交互模式下 import re
1. 普通字符
元字符 : abc
匹配规则 : 匹配相应的普通字符
>>> re.findall("abc","abcdefghabcdhig")
['abc', 'abc']
注意:匹配不到则返回一个空列表 []
2. 或 |
元字符 : ab|cd
匹配规则 : 匹配"|"两边任意一个正则表达式符合的情况
>>> re.findall("ab|cd","abcdefghabcdhcdigab")
['ab', 'cd', 'ab', 'cd', 'cd', 'ab']
注意: "|"两侧不要有没用的空格
3. 匹配单一字符
元字符 : .
匹配规则: 匹配除了换行之外的任意字符
>>>re.findall("f.o", "foo is not fao fo foob f@o")
['foo', 'fao', 'foo', 'f@o']
4. 匹配开始位置
元字符: ^
匹配规则: 匹配一个字符串的开始位置
>>> re.findall("^hello","hello world")
['hello']
5. 匹配结束位置元字符: $
匹配规则:匹配目标字符串的结束位置
>>>re.findall("py$","hello.py")
['py']
6. 匹配重复
元字符 : *
匹配规则: 匹配前面的正则表达式重复0次或多次
>>> re.findall("ab*","abbcdabbbbbefab")
['abb', 'abbbbb', 'ab']
7. 匹配重复
元字符 : +
匹配规则: 匹配前面的正则表达式重复1次或多次
>>> re.findall("b+","abbcdabbbbbefab")
['bb', 'bbbbb', 'b']
8. 匹配重复
元字符: ?
匹配规则: 匹配前面的正则表达式重复0次或1次
ab? --> a ab
>>> re.findall("ab?","abcdefa")
['ab', 'a']
9. 匹配重复
元字符: {n}
匹配规则 : 匹配指定的重复次数
ab{3} ---> abbb
>>> re.findall("ab{3}","abbbbbbbb")
['abbb']
10. 匹配重复
元字符 : {m,n}
匹配规则 : 匹配前面的正则表达式重复 m次 到 n次
ab{3,5} abbb abbbb abbbbb
>>>re.findall("ab{2,5}","abcdabbbabbbbbb")
['abbb', 'abbbbb']
11. 匹配字符集合
元字符: []
匹配规则 : 匹配括号范围内的任意一个字符
[abc123d] a b c 1 2 3 d
[a-z]
[A-Z]
[0-9]
[123a-zA-Z]
>>>re.findall("[_0-9a-zA-Z]","Hello world 123")
['H', 'e', 'l', 'l', 'o', 'w', 'o', 'r', 'l', 'd', '1', '2', '3']
12. 匹配字符集合
元字符: [^...]
匹配规则 : 匹配除指定字符集之外的任意字符
>>> re.findall("[^abc]","nihao abc")
['n', 'i', 'h', 'o', ' ']
13. 匹配任意(非)数字字符
元字符: \d \D
匹配规则 : \d 匹配任意数字字符 \D 匹配任意非数字字符
>>> re.findall("1\d{10}","17611665537")
['17611665537']
14. 匹配(非)普通字符 (普通字符: 数字字母下划线)
元字符 : \w \W
匹配规则: \w 匹配任意一个普通字符------ [_0-9a-zA-Z]
\W 匹配任意非普通字符 ----- [^_0-9a-zA-Z]
>>> re.findall("\w+","hello$1")['hello', '1']
>>> re.findall("\W+","hello$1")
['$']
15. 匹配(非)空字符
元字符 : \s \S
匹配规则:\s 匹配任意空字符 \S 匹配任意非空字符----- [ \n\t\r]
I>>> re.findall("\s",'hello world\r\n\t\0')
[' ', '\r', '\n', '\t']
16. 匹配起止位置元字符: \A \Z
匹配规则 : \A匹配开始位置 \Z匹配结束位置
绝对匹配 \Aabc\Z ----> abc (且字符串只是abc)
>>> re.findall("\A/\w+/\w+\Z",'/football/zhongchao')
['/football/zhongchao']
分开理解\A/\w+/\w+\Z
\A 匹配开始位置
/ ----------后面字符串里的 /
\w+ 任意一个或多个普通字符
/ ----------后面字符串里的 /
\w+ 任意一个或多个普通字符
\Z 匹配结束位置
注意:这里的几个斜杠和反斜杠不太好理解容易混淆,
建议自己用笔在纸上划画
17. 匹配(非)单词边界位置元字符: \b \B
匹配规则 : \b 匹配单词的边界 \B匹配非单词的边界
单词边界 : 数字字母下划线和其他字符的交界位置为单词的边界
>>> re.findall(r"\Bis\b",'This is a test')
['is']