re模块用于对python的正则表达式的操作。

常用正则表达式符号

字符数字:

  . 匹配除换行符以外的任意字符,即[^\n]
  \s 匹配任意空白符(如\t、\n、\r )
  \S 匹配任意非空白符
    \w 匹配[A-Za-z0-9下划线汉字]
    \W 匹配非[A-Za-z0-9下划线汉字]
  \b 匹配单词的开始或结束
  ^或\A 匹配字符串的开始
  $或\Z 匹配字符串的结束
  \d或[0-9] 匹配所有数字
    \D 匹配非数字

次数:

  * 重复零次或多次
  + 重复一次或多次
  ? 重复零次或一次
  {n} 重复n次
  {n,} 重复n次或更多次
  {n,m} 重复n到m次

其他:
    | 匹配|左或|右的字符
    (...) 分组匹配
    \ 转义字符
    [] 匹配符合[]内的字符
    [^] 匹配不符合[]内的字符
组合:
    (?P<name>...) 分组匹配    
    [a-z] 匹配所有小写字母字符
    [^a-z] 匹配所有非小写字母字符
  [^0-9] 匹配所有非数字字符
    [\u4e00-\u9fa5] 匹配中文
    (.*)或(.+) 匹配单行
    ^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$ 匹配IP
    ^1[3|4|5|7|8|9][0-9]\d{8}$ 匹配手机号(貌似手机号第二位有3,4,5,7,8,9)

正则表达式代码实例

 

import re

# . 匹配除换行符以外的任意字符,即[^\n]
# + 重复一次或更多次
# .+匹配任意字符串
res = re.search('f.+n',"abcd1234efghijklmn5678")
print(res.group())  # fghijklmn

# \s 匹配任意空白符(如\t、\n、\r )
res = re.search('\s+',"123$+ \r\n   b")
print(res.group())  #   ' \r\n\t'

# \S 匹配任意非空白符
res = re.search('\S+',"123aZ你好$+ \r\n   b")
print(res.group())  # 123aZ你好$+

# \w 匹配[A-Za-z0-9下划线汉字]
res = re.search('\w+',"123_你好$+ b")
print(res.group())  #   123_你好

# \W 匹配非[A-Za-z0-9下划线汉字]
res = re.search('\W+',"123_你好$+ b")
print(res.group())  #   $+

# ^或\A    匹配字符串的开始
# $或\Z 匹配字符串的结束
res = re.search('\A[0-9]+[a-z]\Z',"123b")
print(res.group())  #   123b

res = re.search('^[0-9]+[a-z]$',"123b")
print(res.group())  #   123b

# \d或[0-9]    匹配所有数字
res = re.search('abcd\d',"abcd1234efgh5678")
print(res.group())  # abcd1

res = re.search('abcd[0-9]',"abcd1234efgh5678")
print(res.group())  # abcd1

# \D 匹配非数字
res = re.search('\D+',"123$+ b")
print(res.group())  #   $+ b

# ?    重复零次或一次
res = re.search('aal?',"aalex") # 匹配aa或者aal
print(res.group())  #   aal

res = re.search('aal?',"aaex")
print(res.group())  #   aa

# * 重复零次或多次
# {n}    重复n次
# {n,}    重复n次或更多次
# {n,m}    重复n到m次
res = re.search('e[0-9]*',"aa1e2345x")
print(res.group())  #   e2345

res = re.search('[0-9]{3}',"aa1e2345x")
print(res.group())  #   234

res = re.search('[0-9]{3,}',"aa1e2345x")
print(res.group())  #   2345

res = re.search('[0-9]{1,3}',"aa1e2345x")
print(res.group())  #   1

# | 匹配|左或|右的字符
res = re.search('abc|ABC',"ABCdabcD")
print(res.group())  #   ABC

# (...) 分组匹配
res = re.search('abc{2}',"Alexabcc") #匹配c两次
print(res.group())  #   abcc

res = re.search('(abc){2}',"Alexabcabc") #匹配abc两次
print(res.group())  #   abcabc

# \ 转义字符
res = re.search(r"\\","abcd12s3\df4sa5f")
print(res.group())  # \

res = re.search("\\\\","abcd12s3\\df4sa5f")
print(res.group())  # \

res = re.search('(abc){2}\|',"Alexabcabc|") #匹配管道符,前面需加反斜杠转义
print(res.group())  #   abcabc|

res = re.search('(abc){2}(\|\|=){2}',"Alexabcabc||=||=") #等号不需转义
print(res.group())  #   abcabc||=||=

# (?P < name >...) 分组匹配
res = re.search("(?P<id>[0-9]+)","abcd1234sdfsaf")
print(res.groupdict())  # {'id': '1234'}

res = re.search("(?P<id>[0-9]+)(?P<name>[a-zA-Z]+)","abcd1234sdfs#2af")
print(res.groupdict())  # {'id': '1234', 'name': 'sdfs'}
a=res.groupdict()
print(a['id']) # 1234
a =res.group('id')
print(a) # 1234

res = re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{8})","371102199211186666")
print(res.groupdict())  # {'province': '3711', 'city': '02', 'birthday': '19921118'}

# [a-z] 匹配所有小写字母字符
res = re.search('[a-z]+',"ABCD1234abcd&*")
print(res.group())  #   abcd

# [^a-z] 匹配所有非小写字母字符
res = re.search('[^a-z]+',"ABCD1234abcd&*")
print(res.group())  #   ABCD1234

# [^0-9] 匹配所有非数字字符
res = re.search('[^0-9]+',"ABCDabcd&*1234")
print(res.group())  #  ABCDabcd&*

# [\u4e00-\u9fa5] 匹配中文
res = re.search('[\u4e00-\u9fa5]+',"ABCDabcd&*1234你好")
print(res.group())  #  你好

# (.*)或(.+) 匹配单行
res = re.search('(.*)',"ABCDabc\nd&*1\r\n234你好")
print(res.group())  #  ABCDabc

res = re.search('(.+)',"ABCDabc\nd&*1\r\n234你好")
print(res.group())  #  ABCDabc

# ^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$ 匹配IP
res = re.search('^(25[0-5]|2[0-4]\d|[0-1]?\d?\d)(\.(25[0-5]|2[0-4]\d|[0-1]?\d?\d)){3}$',"192.168.1.10")
if res:
    print(res.group())  #  192.168.1.10
else:
    print('it is not a valid IP')

# ^1[3|4|5|8][0-9]\d{8}$ 匹配手机号
res = re.search('^1[3|4|5|7|8|9][0-9]\d{8}$',"18710602222")
if res:
    print(res.group())  # 18710602222
else:
    print('it is not a valid phone number')
View Code

相关文章: