正则表达式(Regular Expressions,简称 regex 或 regexp)是一种强大的文本处理工具,用于模式匹配和字符串处理。以下是一些常用的正则表达式及其应用场景。
基础符号
.
:匹配任意单个字符(除了换行符)。*
:匹配前一个字符零次或多次。+
:匹配前一个字符一次或多次。?
:匹配前一个字符零次或一次。\d
:匹配一个数字字符(0-9)。\D
:匹配一个非数字字符。\w
:匹配一个单词字符(字母、数字或下划线)。\W
:匹配一个非单词字符。\s
:匹配一个空白字符(空格、制表符、换行符等)。\S
:匹配一个非空白字符。^
:匹配字符串的开始。$
:匹配字符串的结束。[…]
:匹配方括号内的任意一个字符。[^…]
:匹配不在方括号内的任意一个字符。
常用正则表达式
校验数字
-
匹配正整数
^\d+$
-
匹配负整数
^-\d+$
-
匹配正浮点数
^\d*\.\d+$
-
匹配负浮点数
^-\d*\.\d+$
-
匹配非负整数(正整数和零)
^\d+$
-
匹配非正整数(负整数和零)
^-\d+|0$
-
匹配非负浮点数(正浮点数和零)
^\d+(\.\d+)?$
-
匹配非正浮点数(负浮点数和零)
^(-\d+(\.\d+)?|0(\.0+)?)$
-
匹配整数或浮点数
^-?\d+(\.\d+)?$
-
匹配货币金额(带可选符号和小数)
^\$\-?\d+(,\d{3})*(\.\d{0,2})?$
校验字符
-
匹配电子邮件地址
^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
-
匹配 URL
^(https?|ftp)://[^\s/$.?#].[^\s]*$
-
匹配国内手机号(中国)
^1[3-9]\d{9}$
-
匹配用户名(允许字母、数字、下划线,3到16位)
^[a-zA-Z0-9_]{3,16}$
-
匹配强密码(至少8个字符,至少一个数字和一个字母)
^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{8,}$
-
匹配包含至少一个大写字母、一个小写字母和一个数字的强密码
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[A-Za-z\d]{8,}$
-
匹配包含大小写字母和特殊字符的强密码
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$
-
匹配纯字母字符串
^[A-Za-z]+$
-
匹配纯大写字母字符串
^[A-Z]+$
-
匹配纯小写字母字符串
^[a-z]+$
其他常用
-
匹配国内电话号码(座机)
^\d{3,4}-\d{7,8}$
-
匹配 IP 地址
\b(?:\d{1,3}\.){3}\d{1,3}\b
-
匹配 MAC 地址
^([0-9A-Fa-f]{2}:){5}[0-9A-Fa-f]{2}$
-
匹配日期(YYYY-MM-DD)
^\d{4}-\d{2}-\d{2}$
-
匹配时间(HH:MM:SS)
^\d{2}:\d{2}:\d{2}$
-
匹配日期(MM/DD/YYYY 或 MM-DD-YYYY)
^(0[1-9]|1[0-2])[\/\-](0[1-9]|[12][0-9]|3[01])[\/\-]\d{4}$
-
匹配时间(24小时制,HH:MM)
^([01]\d|2[0-3]):[0-5]\d$
-
匹配邮政编码(国际)
^\d{4,6}$
-
匹配 URL(不带协议)
^[^\s/$.?#].[^\s]*$
-
匹配 RGB 颜色代码
^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$
特殊情况
-
匹配 HTML 标签
^<([a-z]+)([^<]+)*(?:>(.*)<\/\1>|\s+\/>)$
-
匹配包含中文字符的字符串
[\u4e00-\u9fa5]
-
匹配括号内的内容
\(([^)]+)\)
-
匹配引号内的内容
"([^"]*)"
-
匹配 Markdown 链接
\[(.*?)\]\((.*?)\)
-
匹配双引号内的内容
"([^"]*)"
-
匹配单引号内的内容
'([^']*)'
-
匹配 CSV 文件中的一行
^(?:[^,]*,)*[^,]*$
-
匹配美元金额(如 $123.45)
^\$\d+(\.\d{2})?$
-
匹配连续的重复字符
(.)\1+
Python 中使用正则表达式
在 Python 中,可以使用 re
模块处理正则表达式。以下是一些常见的使用方法:
1. re.match()
import re
pattern = r'^\d{4}-\d{2}-\d{2}$'
string = '2023-10-01'
match = re.match(pattern, string)
if match:
print("Match found!")
else:
print("No match.")
2. re.search()
import re
pattern = r'\d{4}-\d{2}-\d{2}'
string = 'The date is 2023-10-01.'
search = re.search(pattern, string)
if search:
print("Search found!")
else:
print("No search.")
3. re.findall()
import re
pattern = r'\d{4}-\d{2}-\d{2}'
string = 'Dates: 2023-10-01, 2024-01-15.'
findall = re.findall(pattern, string)
print(findall) # Output: ['2023-10-01', '2024-01-15']
4. re.sub()
import re
pattern = r'\d{4}-\d{2}-\d{2}'
string = 'The date is 2023-10-01.'
result = re.sub(pattern, 'YYYY-MM-DD', string)
print(result) # Output: 'The date is YYYY-MM-DD.'
总结
正则表达式是一种强大的工具,用于模式匹配和文本处理。通过掌握常用的正则表达式及其应用,你可以高效地处理各种文本数据。结合 Python 的 re
模块,可以在实际项目中灵活运用正则表达式,解决复杂的数据处理问题。