学会Python正则表达式,就看这20个例子(脚本之家修正版)
正则表达式是一种强大的文本处理工具,可以用于各种文本处理任务,如数据清洗、文本分析、信息提取等。本攻略将介绍20个Python正则表达式的例子,帮助您更好地掌握正则表达式的用法。
例子1:匹配数字
import re
text = 'The price of the product is $20'
result = re.findall(r'\d+', text)
print(result)
在上面的代码中,我们使用正则表达式\d+
匹配文本中的数字。+
表示匹配前面的字符一次或多次。运行代码后,输出结果为['20']
。
例子2:匹配单词
import re
text = 'The quick brown fox jumps over the lazy dog'
result = re.findall(r'\b\w+\b', text)
print(result)
在上面的代码中,我们使用正则表达式\b\w+\b
匹配文本中的单词。\b
表示单词的边界,\w+
表示匹配一个或多个字母、数字或下划线。运行代码后,输出结果为['The', 'quick', 'brown', 'fox', 'jumps', 'over', 'the', 'lazy', 'dog']
。
例子3:匹配邮箱地址
import re
text = 'My email is john@example.com'
result = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', text)
print(result)
在上面的代码中,我们使用正则表达式\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b
匹配文本中的邮箱地址。运行代码后,输出结果为['john@example.com']
。
例子4:匹配URL链接
import re
text = 'Check out my website at https://www.example.com'
result = re.findall(r'https?://\S+', text)
print(result)
在上面的代码中,我们使用正则表达式https?://\S+
匹配文本中的URL链接。https?
表示匹配http
或https
,\S+
表示匹配一个或多个非空白字符。运行代码后,输出结果为['https://www.example.com']
。
例子5:匹配IP地址
import re
text = 'My IP address is 192.168.0.1'
result = re.findall(r'\b(?:\d{1,3}\.){3}\d{1,3}\b', text)
print(result)
在上面的代码中,我们使用正则表达式\b(?:\d{1,3}\.){3}\d{1,3}\b
匹配文本中的IP地址。\d{1,3}\.
表示匹配一个或三个数字和一个点号,(?:...)
表示非捕获分组,\b
表示单词的边界。运行代码后,输出结果为['192.168.0.1']
。
例子6:匹配日期
import re
text = 'Today is 2022-01-01'
result = re.findall(r'\d{4}-\d{2}-\d{2}', text)
print(result)
在上面的代码中,我们使用正则表达式\d{4}-\d{2}-\d{2}
匹配文本中的日期。\d{4}
表示匹配四个数字,-
表示匹配一个短横线,\d{2}
表示匹配两个数字。运行代码后,输出结果为['2022-01-01']
。
例子7:匹配手机号码
import re
text = 'My phone number is 123-456-7890'
result = re.findall(r'\d{3}-\d{3}-\d{4}', text)
print(result)
在上面的代码中,我们使用正则表达式\d{3}-\d{3}-\d{4}
匹配文本中的手机号码。\d{3}
表示匹配三个数字,-
表示匹配一个短横线,\d{4}
表示匹配四个数字。运行代码后,输出结果为['123-456-7890']
。
例子8:匹配HTML标签
import re
text = '<h1>Hello, world!</h1>'
result = re.findall(r'<.*?>', text)
print(result)
在上面的代码中,我们使用正则表达式<.*?>
匹配文本中的HTML标签。<
表示匹配一个左尖括号,.*?
表示匹配任意字符,?
表示非贪婪匹配,>
表示匹配一个右尖括号。运行代码后,输出结果为['<h1>', '</h1>']
。
例子9:匹配中文字符
import re
text = '你好,世界!'
result = re.findall(r'[\u4e00-\u9fa5]+', text)
print(result)
在上面的代码中,我们使用正则表达式[\u4e00-\u9fa5]+
匹配文本中的中文字符。[\u4e00-\u9fa5]
表示匹配一个中文字符,+
表示匹配一个或多个中文字符。运行代码后,输出结果为['你好', '世界']
。
例子10:匹配身份证号码
import re
text = 'My ID number is 110101199001011234'
result = re.findall(r'\d{17}[\d|x]|\d{15}', text)
print(result)
在上面的代码中,我们使用正则表达式\d{17}[\d|x]|\d{15}
匹配文本中的身份证号码。\d{17}
表示匹配17个数字,[\d|x]
表示匹配一个数字或字母x
,|
表示或,\d{15}
表示匹配15个数字。运行代码后,输出结果为['110101199001011234']
。
例子11:匹配邮政编码
import re
text = 'My zip code is 100101'
result = re.findall(r'\b\d{6}\b', text)
print(result)
在上面的代码中,我们使用正则表达式\b\d{6}\b
匹配文本中的邮政编码。\d{6}
表示匹配6个数字,\b
表示单词的边界。运行代码后,输出结果为['100101']
。
例子12:匹配QQ号码
import re
text = 'My QQ number is 123456789'
result = re.findall(r'[1-9]\d{4,10}', text)
print(result)
在上面的代码中,我们使用正则表达式[1-9]\d{4,10}
匹配文本中的QQ号码。[1-9]
表示匹配一个非零数字,\d{4,10}
表示匹配4到10个数字。运行代码后,输出结果为['123456789']
。
例子13:匹配微信号
import re
text = 'My WeChat ID is wx123456'
result = re.findall(r'[a-zA-Z][-_a-zA-Z0-9]{5,19}', text)
print(result)
在上面的代码中,我们使用正则表达式[a-zA-Z][-_a-zA-Z0-9]{5,19}
匹配文本中的微信号。[a-zA-Z]
表示匹配一个字母,[-_a-zA-Z0-9]{5,19}
表示匹配5到19个字母、数字或下划线。运行代码后,输出结果为['wx123456']
。
例子14:匹配MAC地址
import re
text = 'My MAC address is 00:11:22:33:44:55'
result = re.findall(r'[0-9a-fA-F]{2}([-:])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}', text)
print(result)
在上面的代码中,我们使用正则表达式[0-9a-fA-F]{2}([-:])[0-9a-fA-F]{2}(?:\1[0-9a-fA-F]{2}){4}
匹配文本中的MAC地址。[0-9a-fA-F]{2}
表示匹配两个十六进制数字,([-:])
表示匹配一个短横线或冒号,并将其保存到分组中,(?:...)
表示非捕获分组,\1
表示引用第一个分组,{4}
表示重复4次。运行代码后,输出结果为['00:11:22:33:44:55']
。
例子15:匹配HTML注释
import re
text = '<!-- This is a comment -->'
result = re.findall(r'<!--(.*?)-->', text)
print(result)
在上面的代码中,我们使用正则表达式<!--(.*?)-->
匹配文本中的HTML注释。<!--
表示匹配一个左注释符,(.*?)
表示匹配任意字符,?
表示非贪婪匹配,-->
表示匹配一个右注释符。运行代码后,输出结果为[' This is a comment ']
。
例子16:匹配XML标签
import re
text = '<book><title>Python Programming</title><author>John Doe</author></book>'
result = re.findall(r'<(\w+)>(.*?)</\1>', text)
print(result)
在上面的代码中,我们使用正则表达式<(\w+)>(.*?)<!--\1-->
匹配文本中的XML标签。<(\w+)>
表示匹配一个左标签符和标签名,并将标签名保存到分组中,(.*?)
表示匹配任意字符,?
表示非贪婪匹配,<!--\1-->
表示匹配一个右标签符和标签名。运行代码后,输出结果为[('title', 'Python Programming'), ('author', 'John Doe')]
。
例子17:匹配HTML标签属性
import re
text = '<a href="https://www.example.com">Example</a>'
result = re.findall(r'<\w+\s+href="([^"]+)".*?>(.*?)</\w+>', text)
print(result)
在上面的代码中,我们使用正则表达式<\w+\s+href="([^"]+)".*?>(.*?)<!--\w+-->
匹配文本中的HTML标签属性。<\w+\s+href="([^"]+)".*?>
表示匹配一个左标签符、标签名、空格、href
属性和属性值,并将属性值保存到分组中,.*?
表示匹配任意字符,?
表示非贪婪匹配,<!--\w+-->
表示匹配一个右标签符和标签名。运行代码后,输出结果为[('https://www.example.com', 'Example')]
。
例子18:匹配HTML标签内容
import re
text = '<h1>Hello, world!</h1>'
result = re.findall(r'<.*?>(.*?)</.*?>', text)
print(result)
在上面的代码中,我们使用正则表达式<.*?>(.*?)<!--.*?-->
匹配文本中的HTML标签内容。<.*?>
表示匹配一个左标签符和任意字符,.*?
表示匹配任意字符,?
表示非贪婪匹配,<!--.*?-->
表示匹配一个右标签符。运行代码后,输出结果为['Hello, world!']
。
例子19:替换文本中的空格
import re
text = 'The quick brown fox jumps over the lazy dog'
result = re.sub(r'\s+', '-', text)
print(result)
在上面的代码中,我们使用正则表达式\s+
匹配文本中的空格,并用短横线替换它们。\s+
表示匹配一个或多个空格。运行代码后,输出结果为The-quick-brown-fox-jumps-over-the-lazy-dog
。
例子20:替换文本中的HTML标签
import re
text = '<h1>Hello, world!</h1>'
result = re.sub(r'<.*?>', '', text)
print(result)
在上面的代码中,我们使用正则表达式<.*?>
匹配文本中的HTML标签,并将它们替换为空字符串。<.*?>
表示匹配一个HTML标签。运行代码后,输出结果为Hello, world!
。
总结
本攻略介绍了20个Python正则表达式的例子,帮助您更好地掌握正则表达式的用法。正则表达是一种强大的文本处理工具,可以用于各种文本处理任务,如数据清洗、文本分析、信息提取等。熟练掌握正则表达式的用法,可以大大提高我们的工作效率。