知道这些正则表达式,让你的代码更简洁
2023-12-16 本文已影响0人
花生学生信
正则表达式(regular expression)
是一种用来描述、匹配和操作字符串的强大工具。它由一系列字符和特殊符号组成,可以用于在文本中搜索、替换、验证和提取特定模式的字符串。
以下是一些常见的正则表达式元字符和符号:
-
.
:匹配任意单个字符,除了换行符。 -
*
:表示匹配前面的元素零次或多次。 -
+
:表示匹配前面的元素一次或多次。 -
?
:表示匹配前面的元素零次或一次。 -
[ ]
:表示匹配方括号中的任意一个字符。 -
[^ ]
:表示匹配除了方括号中的字符之外的任意一个字符。 -
^
:表示匹配字符串的开头。 -
$
:表示匹配字符串的结尾。 -
\
:用于转义特殊字符,使其失去其特殊含义。
例如,正则表达式 abc
可以匹配字符串中的 abc
,a.c
可以匹配 abc
、adc
、aec
等。
校验中文:
^[\u4e00-\u9fa5]+$
#这个正则表达式可以用于判断一个字符串是否完全由中文字符组成。
-
^
表示匹配字符串的开头 -
[\u4e00-\u9fa5]
表示中文字符的范围,包括了 Unicode 编码中所有的中文字符 -
+
表示匹配前面的字符至少出现一次 -
$
表示匹配字符串的结尾
以下是一个示例代码:
import re
text = '你好,世界!'
pattern = r'^[\u4e00-\u9fa5]+$'
if re.match(pattern, text):
print('字符串只包含中文字符')
else:
print('字符串中包含非中文字符')
该示例会输出 字符串只包含中文字符
,因为文本中只包含中文字符。
校验手机号:
^1[3-9]\d{9}$
#这个正则表达式可以匹配以1开头的11位数字,其中第二位数字为3-9之间的任意数字。
-
^
表示匹配字符串的开头 -
1
表示以数字 1 开头 -
[3-9]
表示第二位是数字 3 到 9 中的任意一个 -
\d{9}
表示后面跟着 9 个数字 -
$
表示匹配字符串的结尾
这个正则表达式可以用于验证一个字符串是否为有效的中国大陆手机号码。
以下是一个示例代码:
import re
phone_number = '13912345678'
pattern = r'^1[3-9]\d{9}$'
if re.match(pattern, phone_number):
print('手机号码格式正确')
else:
print('手机号码格式错误')
该示例会输出 手机号码格式正确
,因为 13912345678
符合中国大陆手机号码的格式要求。
校验金额
^\d{1,3}(,\d{3})*(\.\d{2})?$
#可以用来匹配一个字符串是否符合金额的格式,允许包含逗号分隔的千位符和小数点后两位
-
^
表示匹配字符串的开头 -
\d{1,3}
表示匹配 1 到 3 位数字 -
(,\d{3})*
表示匹配逗号和后面紧跟的 3 位数字的模式,可以出现 0 或多次 -
(\.\d{2})?
表示匹配小数点和后面紧跟的 2 位数字的模式,可以出现 0 或 1 次 -
$
表示匹配字符串的结尾
以下是一个示例代码:
import re
amount = '1,234,567.89'
pattern = r'^\d{1,3}(,\d{3})*(\.\d{2})?$'
if re.match(pattern, amount):
print('金额格式正确')
else:
print('金额格式错误')
该示例会输出 金额格式正确
,因为 1,234,567.89
符合金额的格式要求。
校验日期
^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:29(\/|-|\.)(?:0?2)\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$
#这个正则表达式可以匹配格式为"dd/mm/yyyy"、"dd-mm-yyyy"或"dd.mm.yyyy"的日期,其中年份为1600年至9999年之间的日期。
^\d{4}-\d{2}-\d{2}$
#这个正则表达式可以使用以下正则表达式来校验yyyy-mm-dd格式的日期,以4位数字开头,然后是一个连字符,然后是2位数字,再然后是一个连字符,最后是2位数字。
由于该正则表达式较长且复杂,以下是对其不同部分的解释:
-
^(?:(?:31(\/|-|\.)(?:0?[13578]|1[02]))\1|(?:(?:29|30)(\/|-|\.)(?:0?[13-9]|1[0-2])\2))
:匹配月份为 1、3、5、7、8、10 或 12 时,日期可以为 01 到 31。 -
(?:(?:1[6-9]|[2-9]\d)?\d{2})$
:匹配年份为 1600 到 9999 年。 -
^(?:29(\/|-|\.)(?:0?2)\3
:匹配二月份的情况。 -
(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$
:匹配闰年的情况,例如 2000 年。 -
^(?:0?[1-9]|1\d|2[0-8])(\/|-|\.)(?:(?:0?[1-9])|(?:1[0-2]))\4
:匹配日期为 1 到 28 的情况。 -
(?:(?:1[6-9]|[2-9]\d)?\d{2})$
:匹配年份为 1600 到 9999 年。
可以简单的表述如下:
^\d{4}-\d{2}-\d{2}$
解析该正则表达式的含义如下:
-
^
:表示匹配字符串的开头。 -
\d{4}
:表示匹配四个数字,即年份的四位数字。 -
-
:表示匹配一个连字符。 -
\d{2}
:表示匹配两个数字,即月份的两位数字。 -
-
:表示匹配一个连字符。 -
\d{2}
:表示匹配两个数字,即日期的两位数字。 -
$
:表示匹配字符串的结尾。
这个正则表达式可以用于验证简单的 YYYY-MM-DD 格式的日期。
校验身份证号
/^(\d{6})(19|20)?(\d{2})(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])(\d{3})(\d|X)?$/
#这个正则表达式可以匹配18位和15位身份证号,其中18位身份证号的前17位为数字,最后一位可以是数字或者X,15位身份证号的前15位为数字。
-
^
:表示匹配字符串的开头。 -
(\d{6})
:表示匹配六位数字,即身份证号码的前六位,表示地址信息。 -
(19|20)?
:表示可选的 19 或 20,用于匹配身份证号码的年份前两位。 -
(\d{2})
:表示匹配两位数字,用于匹配身份证号码的年份后两位。 -
(0[1-9]|1[0-2])
:表示匹配月份,其中 0[1-9] 匹配 01 到 09,1[0-2] 匹配 10 到 12。 -
(0[1-9]|[12]\d|3[01])
:表示匹配日期,其中 0[1-9] 匹配 01 到 09,[12]\d 匹配 10 到 29,3[01] 匹配 30 或 31。 -
(\d{3})
:表示匹配三位数字,用于匹配身份证号码的顺序码。 -
(\d|X)?
:表示可选的一个数字或大写字母 X,用于匹配身份证号码的校验码。 -
$
:表示匹配字符串的结尾。
这个正则表达式可以用于验证中国身份证号码的格式。
校验文件路径及扩展名
文件路径的正则表达式:
^(\/[^\/\0]+)+$
-
^
:表示匹配字符串的开头。 -
\/
:表示匹配一个斜杠字符/
。 -
[^\/\0]+
:表示匹配一个或多个非斜杠字符和非空字符。 -
+
:表示前面的表达式可以重复一次或多次。 -
$
:表示匹配字符串的结尾。
这个正则表达式可以用于验证路径字符串是否符合以斜杠开头,并且没有包含斜杠以外的非法字符,例如 /path/to/something
是匹配的,而 path/to/something
或 /path/to/something/
不匹配。
扩展名的正则表达式:
\.[a-zA-Z0-9]+$
-
\.
:表示匹配一个点号。 -
[a-zA-Z0-9]+
:表示匹配一个或多个字母或数字。 -
$
:表示匹配字符串的结尾。
这个正则表达式可以用于提取文件名中的扩展名部分,例如 .txt
、.jpg
、.pdf
等。
由数字、英文字母、下划线组成的字符串
^\w+$
-
^
:表示匹配字符串的开头。 -
\w
:表示匹配一个字母、数字或下划线。 -
+
:表示前面的表达式可以重复一次或多次。 -
$
:表示匹配字符串的结尾。
因此,这个正则表达式可以用于验证一个字符串是否只包含字母、数字和下划线,并且没有其他特殊字符。
例如,hello123
、username_1
、password123
都符合该正则表达式,而 hello#world
、user-name
、@password
不符合该正则表达式。