正则表达式是一种通用的字符串匹配工具,可以快速地对字符串进行搜索和替换。Python内置了re模块,可以方便地使用正则表达式进行字符串操作。本文将介绍学习Python正则表达式的必备技巧,包括基本语法、正则表达式的元字符、常用的正则表达式操作等方面。
一、基本语法
正则表达式是一种由字符、元字符组成的文本模式,用于描述一类字符串。正则表达式可以用来匹配、查找、替换字符串。下面是一些基本的正则表达式语法:
1.1 字符集
字符集表示匹配一个字符集中的任意一个字符。可以使用中括号 [] 来表示字符集,如 [abc] 匹配 a、b 或 c 中的任意一个字符。
# 匹配一个由 a、b 或 c 构成的字符 import re str = "abc123" pattern = '[abc]' result = re.findall(pattern, str) print(result)输出结果:
['a', 'b', 'c']
1.2 元字符
元字符是一些特殊的符号,用于表示特定的字符、字符集或重复次数。下面是一些常用的元字符:
· (点号):表示任意一个字符。
\d:表示任意一个数字。
\w:表示任意一个字母、数字或下划线。等价于 [a-zA-Z0-9_]。
\s:表示任意一个空白字符,包括空格、制表符、换行符等。
# 匹配一个以冒号开头的文本行 import re str = "Name: John\nAge: 28" pattern = '^Name:.*' result = re.findall(pattern, str, re.M) print(result)输出结果:
['Name: John']
1.3 重复次数
重复次数指定匹配的字符、字符集或表达式重复出现的次数。下面是一些常用的重复次数:
*:匹配前一个字符、字符集或表达式零次或多次。
+:匹配前一个字符、字符集或表达式一次或多次。
?:匹配前一个字符、字符集或表达式零次或一次。
{n}:匹配前一个字符、字符集或表达式恰好出现 n 次。
{n,m}:匹配前一个字符、字符集或表达式出现 n 到 m 次。
# 匹配一个由数字组成的手机号码 import re str = "13912345678" pattern = '1[345789]\d{9}' result = re.findall(pattern, str) print(result)输出结果:
['13912345678']
二、正则表达式的元字符
2.1. 点号(.)
点号可以匹配任意一个字符,除了换行符。例如,用正则表达式 .o 匹配 foobar 可以得到 foo。
# 匹配一个以o结尾的单词 import re str = "hello world\nfoo\nbar\n" pattern = r'\w+o\b' result = re.findall(pattern, str, re.M) print(result)输出结果:
['world', 'foo']
2.2. 问号(?)
问号可以将紧挨着它前面的字符、字符集或表达式匹配零次或一次。例如,用正则表达式 colou?r 匹配 color 或 colour 都可以。
# 匹配一个以www开头的URL地址 import re str = "http://www.google.com" pattern = r'www\..+?\.(com|cn)' result = re.findall(pattern, str) print(result)输出结果:
['google.com']
2.3. 星号(*)和加号(+)
星号和加号用于指定前面的字符、字符集或表达式可以重复出现的次数。星号表示可以出现零次或多次,加号表示可以出现一次或多次。例如,用正则表达式 ab*c 匹配 ac、abc、abbc、abbbc 等字符串,用正则表达式 ab+c 匹配 abc、abbc、abbbc 等字符串。
# 检查一个IP地址的合法性 import re ip = "192.168.1.1" pattern = r'\d+\.\d+\.\d+\.\d+' result = re.match(pattern, ip) if result: print("Valid IP address") else: print("Invalid IP address")输出结果:
Valid IP address
三、常用的正则表达式操作
3.1. 查找匹配的字符串
可以使用re模块的 search()、match()、findall() 方法查找匹配的字符串。其中 search() 方法从头开始搜索,如果找到第一个匹配项就返回,而 match() 方法只能从头开始匹配,如果不是以指定的字符串开头,就返回 None。findall() 方法可以搜索整个字符串,返回所有满足条件的字符串。
# 查找一个包含数字的字符串 import re str = "The number is 123456" pattern = r'\d+' result = re.search(pattern, str) if result: print(result.group()) else: print("Not found")输出结果:
123456
3.2. 替换字符串
可以使用 re.sub() 方法替换匹配的字符串。该方法的第一个参数是正则表达式,第二个参数是要替换成的字符串,第三个参数是要搜索的字符串。
# 将一个字符串中的空格替换为下划线 import re str = "The quick brown fox jumps over the lazy dog" pattern = r'\s+' result = re.sub(pattern, '_', str) print(result)输出结果:
The_quick_brown_fox_jumps_over_the_lazy_dog
3.3. 分割字符串
可以使用 re.split() 方法将字符串按指定的正则表达式进行分割,以列表形式返回划分后的子串。
# 分割一个由逗号和空格组成的字符串 import re str = "a, b, c" pattern = r',\s' result = re.split(pattern, str) print(result)输出结果:
['a', 'b', 'c']
总结:
Python自带的re模块提供了强大的正则表达式操作。本文介绍了Python正则表达式的基本语法、常用的元字符和重复次数,以及常用的正则表达式操作,如查找匹配的字符串、替换字符串和分割字符串等。熟练掌握这些必备技巧,可以快速地对字符串进行处理和分析。