正则表达式re

一. 正则表达式

正则表达式是一个描述字符模式的对象,可以用来
检查一个串是否含有某种子串、将匹配的子串做
替换或者从某个串中取出符合某个条件的子串

# 使用语法
 

import re
# 6~18位密码 只能包含a-zA-Z0-9_ 不能以数字为开头
result = re.match("^[^\d]\w{5,17}$","def456xxx")
if(result):
    print("合法")
else:
    print("不合法")

## 匹配规则

### 单字符匹配

#### x
匹配 x 

#### [xyz]

1. [abc]
匹配 a , b , c 任意一个字符

2. [0-9]
匹配任意一个数字

3. [a-zA-Z]
匹配 任意一个字母

4. [a-zA-Z0-9-]
匹配任意字母、数字 和  -

5. [^0-9]
匹配任意一个非数字

### 多字符匹配

1. X*
匹配 ==0个或多个== X 匹配的内容

2. X+
匹配 ==1个或多个== X 匹配的内容

3. X?
匹配 ==0个或1个== X 匹配的内容

4. X{m}
匹配 ==m个== X 匹配的内容

5. X{m, }
匹配 ==至少m个== X匹配的内容

6. X{m,  n}
匹配 ==至少m个,最多n个== X匹配的内容
PS: m <= n

#### 元字符

1. \d
等价与 [0-9]

2. \D
等价与 [^0-9]

3. \w
等价与 [a-zA-Z0-9_]

4. \W
对 \w 取反

5. \s
匹配任意一个空白字符
包括  空格、制表符、换行符等

6. \S
匹配任意一个非空白字符

#### 点字符

1. .  (dot)
匹配 除 换行 符 之外的任意一个字符

2. \\. 
匹配 一个 点

### 贪婪式表达式

1. X*
等价与 X{0,}

2. X+
等价与 X{1, }

3. X?
等价与X{0,1}


### 非贪婪式表达式

1. *?
等价与 X{0,}

2. X+?
等价与 X{1, }

3. X??
等价与X{0,1}

非贪婪式表达式、优先匹配 表达式后面的正则匹配的内容,非贪婪式表达式 尽可能少的匹配元素

### 限定符

^
出现在正则的头部
代表以 ... 开头

$
出现在 正则的尾部
代表 以 ... 结尾

### 选择 
|
(a|b)


## 正则修饰符


修饰符 | 作用
---|---
re.I | 使匹配大小写不敏感
re.S | 使.可以匹配换行符\n
re.M | 多行匹配,影响^$
re.L | 做本地化识别匹配 会影响\w\W\b\B(基本不使用)
re.U | 根据unicode字符集解析字符(python2支持 python移除)

### 常用的正则表达式表

#### 一、数字的正则表达式

```
- 数字:
^[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+)?$
```


#### 二、字符的正则表达式

```
- 汉字:\^[\u4e00-\u9fa5]{0,}$
var str = "38u48djhfod中国,@##@!_)+bia發財サービス二條한국어國家";
var reg = /[\u4e00-\u9fa5]+/g;
console.log(str.match(reg));

- 英文和数字:
^[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}$

```
#### 特殊需求正则表达式

```
- Email地址:
^\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})+/.?

- URL:
[a-zA-z]+://[^\s]* 或  ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$

- 手机号码:
\^[1][3,4,5,7,8][0-9]{9}$

- 15或18位身份证:
^\d{15}|\d{18}$

- 15位身份证:
^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$

- 18位身份证:
^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$

- 短身份证号码(数字、字母x结尾):
^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$

- 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):
\^[a-zA-Z][a-zA-Z0-9_]{4,15}$

- 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):
\^[a-zA-Z]\w{5,17}$

- 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):
\^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$

- 日期格式:
^\d{4}-\d{1,2}-\d{1,2}

- IP地址:
\d+\.\d+\.\d+\.\d+
```

## 其他符号 了解即可

### 分组(...)

(\d+)
对匹配内容进行分组

(?<key>\d+)
命名分组
正则匹配的内容会交给 key


### 断言

?=  正向确定断言
示例:  /\d+(?=%)/.exec("昨天股票涨了20%,今天跌了50%,损失了8000元") 
只匹配百分号之前的数字

?!  正向否定断言
示例 :/\d{2,}(?!%)/.exec("昨天股票涨了20%,今天跌了50%,损失了8000元") 
只匹配非百分号之前的数字

?<=   反向确定断言
示例:  /(?<=\$)\d+/.exec("$1 兑换 ¥6")
只匹配美元符号之后的数字

?<!  反向否定断言
示例 : /(?<!\$)\d+/.exec("$1 兑换 ¥6")
只匹配不在美元符号后面的数字

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值