python校验字符串是否符合正则表达式
正则表达式
正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
例如:
- runoo+b,可以匹配 runoob、runooob、runoooooob 等,+ 号代表前面的字符必须至少出现一次(1次或多次)。
- runoob,可以匹配 runob、runoob、runoooooob 等, 号代表前面的字符可以不出现,也可以出现一次或者多次(0次、或1次、或多次)。
- colou?r 可以匹配 color 或者 colour,? 问号代表前面的字符最多只可以出现一次(0次、或1次)。
re模块
python中可以使用re.search()方法验证字符串是否符合正则表达式。
re.search()方法扫描整个字符串,并返回第一个成功的匹配。如果匹配失败,则返回None。
语法:
re.search(pattern, string, flags=0)
参数:
- pattern : 正则中的模式字符串。
- string : 要被查找替换的原始字符串。
- flags : 标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。
示例:
#encode:u8
import re
s1 = 'adkkdk'
#判断s1字符串是否负责都为小写的正则
an = re.search('^[a-z]+$', s1)
if an:
print 'yes'
else:
print 'no'
常用正则表达式例子
1. 匹配邮箱地址: ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
2. 匹配手机号码: ^1[3-9]\d{9}$
3. 匹配中文字符: ^[\u4e00-\u9fa5]+$
4. 匹配身份证号码: ^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dX]$
5. 匹配URL: ^(http|https)://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
6. 匹配IP地址: ^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$
7. 匹配HTML标签: <(\S*?)[^>]*>.*?|<.*? />
8. 匹配日期格式(YYYY-MM-DD): ^\d{4}-\d{2}-\d{2}$
9. 匹配时间格式(HH:MM:SS): ^([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$
10. 匹配手机号和固话: ^(0\d{2,3}-\d{7,8}|1[3-9]\d{9})$
11. 匹配整数: ^-?\d+$
12. 匹配正整数: ^[1-9]\d*$
13. 匹配负整数: ^-[1-9]\d*$
14. 匹配非负整数(正整数 + 0): ^\d+$
15. 匹配非正整数(负整数 + 0): ^-[1-9]\d*|0$
16. 匹配小数: ^-?\d+\.\d+$
17. 匹配正小数: ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$
18. 匹配负小数: ^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$
19. 匹配非负小数: ^\d+\.\d*|0\.\d*[1-9]\d*$
20. 匹配非正小数: ^(-\d+\.\d*|0\.\d*[1-9]\d*)$
21. 匹配邮政编码: ^\d{6}$
22. 匹配16进制颜色值: ^#?([a-fA-F0-9]{6}|[a-fA-F0-9]{3})$
23. 匹配身份证号码: ^[1-9]\d{5}(19|20)\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}[\dX]$
24. 匹配空白行: \n\s*\r
25. 匹配首尾空白字符: ^\s*|\s*$
26. 匹配HTML注释: <!--.*?-->
27. 匹配QQ号: [1-9][0-9]{4,}
28. 匹配微信号: [a-zA-Z][a-zA-Z0-9_-]{5,19}
29. 匹配微博账号: [a-zA-Z0-9_]{3,20}
30. 匹配车牌号: [a-zA-Z0-9]{5,7}
31. 匹配银行卡号: \d{16}|\d{19}
32. 匹配密码强度(6-18位,包含数字,字母,特殊字符): ^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)(?=.*[^A-Za-z0-9]).{6,18}$
33. 匹配中英文及数字: ^[a-zA-Z0-9\u4e00-\u9fa5]+$
34. 匹配16进制数字: ^[0-9a-fA-F]+$
35. 匹配年份: ^(19|20)\d{2}$
36. 匹配金额(最多2位小数): ^\d+(\.\d{1,2})?$
37. 匹配密码(6-18位数字和字母组合): ^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,18}$
38. 匹配文件路径: ^[a-zA-Z]:\\[^*|":<>?\n]*$
39. 匹配Linux文件路径: ^/.*$
40. 匹配域名: ^[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z]{2,3})+$
41. 匹配16进制RGB颜色值: ^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$
42. 匹配日期格式(MM/DD/YYYY): ^(0[1-9]|1[0-2])/(0[1-9]|[12]\d|3[01])/((19|20)\d{2})$
43. 匹配时间格式(HH:MM:SS): ^(0[0-9]|1[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$
44. 匹配千位分隔符数字: ^\d{1,3}(,\d{3})*(\.\d+)?$
45. 匹配Markdown标题: ^#{1,6}\s.*
46. 匹配Markdown链接: \[.*\]\(.*\)
47. 匹配Markdown图片: !\[\]\(.*\)
48. 匹配XML标签: <(\S*?)[^>]*>.*?</\1>|<.*? />
49. 匹配JSON字符串: ^\{.*\}$
50. 匹配JavaScript注释: //(.*?)$|/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/