(?:\d{1,3}\.){3}\d{1,3}
import re
p = re.compile('(?:\d{1,3}\.){3}\d{1,3}')
ip = "blah blah 192.168.0.185 blah blah longan@47.110.60.168"
print(p.findall(ip))
## ['192.168.0.185', '47.110.60.168']
import re
p = re.compile('\w+(?:\.\w+)*@\w+(?:\.com|\.edu)(?:\.cn)?')
email = '''
wuyf.phd@foximail.com
wuyanfeng@jxufe.edu.cn
1201900111@jxufe.edu.cn
longan@47.110.60.168
'''
print(p.findall(email))
## ['wuyf.phd@foximail.com', 'wuyanfeng@jxufe.edu.cn', '1201900111@jxufe.edu.cn']
\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])
p = re.compile('\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])')
date = '''
2021-09-26
2021-11-34
2021-22-03
2021-02-29
'''
print(p.findall(date))
## ['2021-09-26', '2021-02-29']
但是,并没有2021年02月并没有29号,怎么办?
\d{4}/(?:0[1-9]|1[0-2])/(?:0[1-9]|[12]\d|3[01])
p = re.compile('\d{4}/(?:0[1-9]|1[0-2])/(?:0[1-9]|[12]\d|3[01])')
date = '''
2021/09/26
2021/11/34
2021/22/03
2021/02/29
'''
print(p.findall(date))
## ['2021/09/26', '2021/02/29']
\d{2}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])
p = re.compile('\d{2}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])')
date = '''
21-09-26
21-11-34
97-07-01
99-02-29
'''
print(p.findall(date))
## ['21-09-26', '97-07-01', '99-02-29']
还有一些格式:
| January,01,1998 | January,01,98 |
| Jan,01,1998 | Jan,1st,1998 |
| Jan,1st,98 | JAN,01,1998 |
| … |
怎么处理?
(?:[01]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)
p = re.compile('(?:[01]\d|2[0-3]):(?:[0-5]\d):(?:[0-5]\d)')
time = '''
00:01:59
23:59:59
24:00:00
24:00:60
25:60:00
'''
print(p.findall(time))
## ['00:01:59', '23:59:59']
(?:0\d|1[0-1]):(?:[0-5]\d):(?:[0-5]\d) (?:a\.m\.|p\.m\.)
p = re.compile('(?:0\d|1[0-1]):(?:[0-5]\d):(?:[0-5]\d) (?:a\.m\.|p\.m\.)')
time = '''
01:30:00 p.m.
11:59:59 a.m.
12:00:00 a.m.
06:61:50 a.m.
'''
print(p.findall(time))
## ['01:30:00 p.m.', '11:59:59 a.m.']
还有哪些其他形式的时间呢?
(?<!\d)1[3578]\d ?\d{4} ?\d{4}(?!\d)
p = re.compile('(?<!\d)1[3578]\d ?\d{4} ?\d{4}(?!\d)')
tel = '''
136 0793 0123
188 7672 1234
15912341234
25912341234
159123412341234
'''
print(p.findall(tel))
## ['136 0793 0123', '188 7672 1234', '15912341234']
0791[- ]?\d{4}[- ]?\d{4}
p = re.compile('0791[- ]?\d{4}[- ]?\d{4}')
tel = '''
0791-8381 6383
0791-0123-4567
0751 0123 4567
'''
print(p.findall(tel))
## ['0791-8381 6383', '0791-0123-4567']
怎么匹配整个江西的固定电话号码?
怎么匹配北京市固定电话号码?上海市的,又如何匹配呢?
| 金融机构 | 电话号码 | 金融机构 | 电话号码 |
|---|---|---|---|
| 工商银行 | 95588 | 建设银行 | 95533 |
| 农业银行 | 95599 | 中国银行 | 95566 |
| 交通银行 | 95559 | 浦发银行 | 95528 |
| 民生银行 | 95568 | 兴业银行 | 95561 |
| 中信银行 | 95558 | 深发银行 | 95501 |
| 华夏银行 | 95577 | 招商银行 | 95555 |
| 广发银行 | 95508 | 光大银行 | 95595 |
| 生命人寿 | 95535 | 中国人保 | 95518 |
| 中国人寿 | 95519 | 太平洋保险 | 95500 |
| 平安保险 | 95511 | 新华保险 | 95567 |
| 医疗保险查询 | 96102 | 泰康保险 | 95522 |
| 东方航空 | 95530 | 厦门航空 | 95557 |
怎么处理?
p = re.compile('36\d{2}\d{2}(?:19\d{2}|20\d{2})(?:0[1-9]|1[0-2])(?:0[1-9]|[12]\d|3[01])\d{3}(?:\d|X)')
ID = '''
36010019970701000X
36020019970701000X
36030019970701000X
36040019991212000X
'''
print(p.findall(ID))
## ['36010019970701000X', '36020019970701000X', '36030019970701000X', '36040019991212000X']
| 城市名称 | 身份证开头 | 城市名称 | 身份证开头 | 城市名称 | 身份证开头 |
|---|---|---|---|---|---|
| 南昌市 | 3601 | 景德镇市 | 3602 | 萍乡市 | 3603 |
| 九江市 | 3604 | 新余市 | 3605 | 鹰潭市 | 3606 |
| 赣州市 | 3607 | 吉安市 | 3608 | 宜春市 | 3609 |
| 抚州市 | 3610 | 上饶市 | 3611 |
| 城市名称 | 身份证开头 | 城市名称 | 身份证开头 |
|---|---|---|---|
| 市辖区 | 3101 | 县 | 3102 |
转载自知乎专栏:最实用的正则表达式整理
注意:部分显示可能有误!
| 匹配 | 正则表达式 |
|---|---|
| 数字 | ^[0-9]$ |
| n位的数字 | ^\d{n}$ |
| 至少n位的数字 | ^\d{n,}$ |
| m-n位的数字 | ^\d{m,n}$ |
| 零和非零开头的数字 | ^(0|[1-9][0-9]*)$ |
| 非零开头的最多带两位小数的数字 | ^([1-9][0-9]*)+(.[0-9]{1,2})?$ |
| 带1-2位小数的正数或负数 | ^(\-)?\d+(\.\d{1,2})?$ |
| 正数、负数、和小数 | ^(\-|\+)?\d+(\.\d+)?$ |
| 有两位小数的正实数 | ^[0-9]+(.[0-9]{2})?$ |
| 有1~3位小数的正实数 | ^[0-9]+(.[0-9]{1,3})?$ |
| 非零的正整数 | ^[1-9]\d*$或 ^([1-9][0-9]*){1,3}$或 ^\+?[1-9][0-9]*$ |
| 非零的负整数 | ^\-[1-9][]0-9"*$或 ^-[1-9]\d*$ |
| 非负整数 | ^\d+$或 ^[1-9]\d*|0$ |
| 非正整数 | ^-[1-9]\d*|0$或 ^((-\d+)|(0+))$ |
| 非负浮点数 | ^\d+(\.\d+)?$或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$ |
| 非正浮点数 | ^((-\d+(\.\d+)?)|(0+(\.0+)?))$或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$ |
| 正浮点数 | ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$ |
| 负浮点数 | ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$ |
| 浮点数 | ^(-?\d+)(\.\d+)?$或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$ |
| 匹配 | 正则表达式 |
|---|---|
| 汉字 | ^[\u4e00-\u9fa5]{0,}$ |
| 英文和数字 | ^[A-Za-z0-9]+$或 ^[A-Za-z0-9]{4,40}$ |
| 长度为3-20的所有字符 | ^.{3,20}$ |
| 由26个英文字母组成的字符串 | ^[A-Za-z]+$ |
| 由26个大写英文字母组成的字符串 | ^[A-Z]+$ |
| 由26个小写英文字母组成的字符串 | ^[a-z]+$ |
| 由数字和26个英文字母组成的字符串 | ^[A-Za-z0-9]+$ |
| 由数字、26个英文字母或者下划线组成的字符串 | ^\w+$或 ^\w{3,20}$ |
| 中文、英文、数字包括下划线 | ^[\u4E00-\u9FA5A-Za-z0-9_]+$ |
| 中文、英文、数字但不包括下划线等符号 | ^[\u4E00-\u9FA5A-Za-z0-9]+$或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$ |
| 可以输入含有^%&’,;=?$"等字符 | [^%&',;=?$\x22]+ |
| 禁止输入含有~的字符 | [^~\x22]+ |
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$\d{3}-\d{8}|\d{4}-\d{7}^\d{15}|\d{18}$^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$^[a-zA-Z][a-zA-Z0-9_]{4,15}$^[a-zA-Z]\w{5,17}$^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$^\d{4}-\d{1,2}-\d{1,2}^(0?[1-9]|1[0-2])$^((0?[1-9])|((1|2)[0-9])|30|31)$^[1-9][0-9]*$^(0|[1-9][0-9]*)$^(0|-?[1-9][0-9]*)$^[0-9]+(.[0-9]+)?$^[0-9]+(.[0-9]{2})?$^[0-9]+(.[0-9]{1,2})?$^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$^([a-zA-Z]+-?)+[a-zA-Z0-9]+\.[x|X][m|M][l|L]$[\u4e00-\u9fa5][^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))28 空白行的正则表达式\n\s*\r (可以用来删除空白行)<(\S*?)[^>]*>.*?</\1>|<.*? /> (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)^\s*|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)[1-9][0-9]{4,} (腾讯QQ号从10000开始)[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)\d+\.\d+\.\d+\.\d+ (提取IP地址时有用)((?:(?:25[0-5]|2[0-4]\d|[01]?\d?\d)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d?\d))^[0-9]+\.{0,1}[0-9]{0,2}$"^[0-9]*$""^\d{n}$""^\d{n,}$""^\d{m,n}$""^(0|[1-9][0-9]*)$""^[0-9]+(.[0-9]{2})?$""^[0-9]+(.[0-9]{1,3})?$""^\+?[1-9][0-9]*$""^\-[1-9][]0-9"*$"^.{3}$""^[A-Za-z]+$""^[A-Z]+$""^[a-z]+$""^[A-Za-z0-9]+$""^\w+$"^[a-zA-Z]\w{5,17}$ 正确格式为以字母开头,长度在6~18之间,只能包含字符、数字和下划线^%&'',;=?$\"等字符
"[^%&'',;=?$\x22]+""^[\u4e00-\u9fa5]{0,}$""^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。"^\d{15}|\d{18}$"。"01"~"09"和"1"~"12"。"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。^[0-9]+\.{0,1}[0-9]{0,2}$^(\d{4}|(\d{4}-\d{1,2})|(\d{4}-\d{1,2}-\d{1,2}))$\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*转自:https://blog.csdn.net/weixin_40135101/article/details/81358712
| 用户名 | ^[a-z0-9_]{3,16}$ |
| 密码 | ? |
| 十六进制值 | ? |
| URL | ? |
| HTML标签 | ? |
| 代码注释 | ? |
| Unicode编码中的汉字范围 | ^[\u2E80-\u9FFF]+$ |