正则表达式

正则表达式广泛用于前端,移动端,以及服务端,用来做字符串的规则校验,校验是否合法

  • \d可以匹配一个数字,\w可以匹配一个字母或数字
1
2
3
'00\d'可以匹配'007',但无法匹配'00A';

'\d\d\d'可以匹配'010';
  • .匹配任意字符
  • *表示任意个字符,包括0个,+表示至少一个字符,?表示0个或1个字符,{n}表示n个字符,{n-m}表示n-m个字符
  • []表示范围
    1
    2
    3
    4
    5
    6
    7
    8
    [0-9a-zA-Z\_]可以匹配一个数字,字母或者下划线
    [0-9a-zA-Z\_]+可以匹配至少由一个数字、字母或者下划线组成的字符串,比如'a100','0_Z','Py3000'等等
    ```
    * `A|B`可以匹配A或B,所以`(P|p)ython`可以匹配`'Python'`或者`'python'`
    * ^表示行的开头,^\d表示必须以数字开头。
    * $表示行的结束,\d$表示必须以数字结束。

    ## python中的使用

import re
if re.match(r’^\d{3}-\d{3,8}$’,’010-55’):
print ‘ok’
else:
print ‘not match’

1
2

无法识别连续的空格,用正则表达式试试:

re.split(r’\s+’, ‘a b c’)
[‘a’, ‘b’, ‘c’]

1
2

无论多少个空格都可以正常分割。加入,试试

re.split(r’[\s\,]+’, ‘a,b, c d’)
[‘a’, ‘b’, ‘c’, ‘d’]

1
再加入;试试:

re.split(r’[\s\,\;]+’, ‘a,b;; c d’)
[‘a’, ‘b’, ‘c’, ‘d’]

1
2
**分组功能**
加上()用来做分组的拆分

m = re.match(r’^(\d{3})-(\d{3,8})$’, ‘010-12345’)
m.group(1)
‘010’
m.group(2)
‘12345’

1
2
3

**预编译**
如果一个正则表达式要重复使用几千次,出于效率的考虑,我们可以预编译该正则表达式

import re

编译:

re_telephone = re.compile(r’^(\d{3})-(\d{3,8})$’)

使用:

re_telephone.match(‘010-12345’).groups()
执行结果:
(‘010’, ‘12345’)
```