正则表达式简介
默认情况下,正则表达式(Regex)会匹配尽量多的字符,除非使用?标记
-
只能匹配一个字符的:
符号 匹配 . 任意1个字符 [a-z] 任意1个小写字符 -
数量限制符号:
符号 匹配 ? 匹配0-1次 + 匹配1-n次 * 匹配0-n次 {3} 匹配3次 {3,5} 匹配3-5次 -
作为一个整体
符号 匹配 (asd)+ 整体匹配1-n次 (ab cd) | 选择一个
常用的符号
符号 | 匹配 |
---|---|
^ | 匹配行首 |
$ | 匹配行尾 |
. | 匹配1个any字符 |
? | 匹配0次或1次 |
? | 匹配尽可能少的字符 |
* | 匹配0次或多次 |
+ | 匹配1次或多次 |
{n} | 匹配n次 |
(?:) | 匹配但不获取 |
[a-z] | 匹配任意小写字母字符 |
[^a-z] | 匹配除了小写字母any字符 |
[0-9] | 匹配任意数字字符 |
(?!) | 匹配不符合的 |
在Python中使用正则表达式
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
import re txt = "policeman" pattern = "<a>.*?</a>" # 匹配<a></a>标签(中途不能换行) pattern = "<a>([\s\S]*?)</a>" # 匹配<a></a>标签并获取中间的内容(中途可以换行) pattern = "[0-9]+" # 匹配一个或多个数字 pattern = "police(?:wo)?man" # 匹配policeman或policawoman pattern = "do(es)??" # 匹配do或does 如果能匹配do 就不匹配does pattern = "^(?!.*?aaa).*$" # 匹配不包含aaa的 pattern = "[125][0-2][0-9]{4}[4-7][0-9][0-5][0-9]" # 匹配学号 all = re.findall(pattern, xh) # 返回一个list类型的匹配列表 a = re.search(pattern, xh) # re.fullmatch(pattern, xh) # 匹配时返回匹配对象,否则返回None if a: a = a.group() #如果能全部匹配,返回全部匹配的结果,否则返回第一个()里的结果 print a def middle(matched): value = matched.group('value') return value[1] s = '{sad}{a}{s}{ddd}' print(re.sub('(?P<value>\{.\})', middle, s)) # 将{.}替换成. |