(?:\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]+$ |