1. Python正则表达式的基础知识
1.1 正则表达式是什么?
正则表达式是一种描述字符串模式的工具,通过正则表达式可以帮助我们快速、准确地处理字符串。
1.2 正则表达式的语法
正则表达式是由特殊符号和普通字符组成的表达式,这些特殊符号用来描述某些字符集,在Python中,使用正则表达式需要用到re模块。
import re
正则表达式的特殊符号主要有:
. 匹配任意字符(除了换行符)。
* 匹配前面的字符 0 次或多次。
+ 匹配前面的字符 1 次或多次。
? 匹配前面的字符 0 次或 1 次。
{n} 匹配前面的字符恰好 n 次。
{n,} 匹配前面的字符至少 n 次。
{n,m} 匹配前面的字符至少 n 次,至多 m 次。
| 匹配两个表达式中的一个。
() 分组,用于对表达式的一部分进行分组。
[] 字符集,匹配中括号中的任意一个字符。
^ 字符集的取反,匹配除了中括号中的任意一个字符以外的字符。
\ 转义符,用于匹配特殊字符。
\d 匹配数字。
\D 匹配非数字。
\s 匹配空白字符(包括空格、制表符、换行符等)。
\S 匹配非空白字符。
\w 匹配字母、数字、下划线。
\W 匹配非字母、数字、下划线。
2. 使用正则表达式匹配字符串
2.1 匹配IP地址
IP地址是由四个十进制数组成的,每个数的范围是0-255,中间用点号隔开。下面是一个匹配IP地址的正则表达式:
import re
pattern = r'^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$'
ip1 = '192.168.1.1'
ip2 = '256.0.0.1'
match1 = re.match(pattern, ip1)
match2 = re.match(pattern, ip2)
print(match1) #
print(match2) # None
上面的正则表达式中,使用了分组、或运算符、量词等多种语法,可以匹配合法的IP地址。
2.2 匹配手机号码
手机号码是由十一位数字组成,第一个数字必须是1,第二位数字必须是3、4、5、6、7、8、9中的一个,下面是一个匹配手机号码的正则表达式:
import re
pattern = r'^1[3456789]\d{9}$'
phone1 = '13812345678'
phone2 = '19912345678'
match1 = re.match(pattern, phone1)
match2 = re.match(pattern, phone2)
print(match1) #
print(match2) #
上面的正则表达式中,使用了字符集和量词,可以匹配合法的手机号码。
3. 使用正则表达式替换字符串
3.1 替换邮箱地址
我们可以使用正则表达式将一段文本中的邮箱地址替换成指定的文本。
import re
pattern = r'[\w\.-]+@[\w\.-]+'
text = '我的邮箱是123456@qq.com,不要发垃圾邮件到我的邮箱。'
new_text = re.sub(pattern, '[Email]', text)
print(new_text) # 我的邮箱是[Email],不要发垃圾邮件到我的邮箱。
上面的正则表达式中,使用了字符集、量词和分组,可以匹配出邮件地址。
3.2 替换HTML标签
我们也可以使用正则表达式替换一段HTML代码中的标签。
import re
pattern = r'<[^>]+>'
html = '<p>这是一段<strong>HTML</strong>代码,<a href="http://www.baidu.com">百度</a></p>'
new_html = re.sub(pattern, '', html)
print(new_html) # 这是一段HTML代码,百度
上面的正则表达式中,使用了字符集和量词,可以匹配出HTML标签。
4. 使用正则表达式提取信息
4.1 提取HTML代码中的图片链接
我们可以使用正则表达式提取一段HTML代码中的图片链接。
import re
html = '<img src="http://www.example.com/image1.jpg" alt="Image 1"><img src="http://www.example.com/image2.jpg" alt="Image 2">'
urls = re.findall(pattern, html)
print(urls) # ['http://www.example.com/image1.jpg', 'http://www.example.com/image2.jpg']
上面的正则表达式中,使用了反向引用和非贪婪量词,可以匹配出HTML代码中的图片链接。
4.2 提取HTML代码中的文本内容
我们也可以使用正则表达式提取一段HTML代码中的文本内容。
import re
pattern = r'<p>(.*)</p>'
html = '<p>这是一段<strong>HTML</strong>代码</p><p>这是另一段<em>HTML</em>代码</p>'
texts = re.findall(pattern, html)
for text in texts:
print(text)
上面的正则表达式中,使用了分组和非贪婪量词,可以匹配出HTML代码中的文本内容。
5. 总结
正则表达式是一种强大的工具,可以帮助我们更快、更准确地处理字符串。Python提供了re模块来支持正则表达式操作,我们可以使用正则表达式匹配、替换、提取字符串等。