python 正则表达式详解

一、元字符

.    句号匹配任意单个字符

[]   匹配方括号内的任意字符

[^]  否定的字符种类

*  匹配0次或无限次

+  匹配1次或无限次

? 匹配0次或一次

{n,m}  匹配num个大括号之前的字符(n<=num<=num)

(xyz)  匹配与xyz完全相等的字符串,每个字符串都是and关系

|   或运算符

\   转义字符

^  从字符串开头位置开始匹配

$  从字符串未端开始匹配

二、字符匹配

\d 匹配数字

\D 不匹配数字

\s 匹配空白字符

\S 与\s相反

\w 匹配中文、下划线、数字、英文

\W 与\w相反

\b 匹配单词的开始或结束

\B 与\b相反

三、匹配模式参数

1).re.l 忽略大小写

2).re.M  多行模式,改变'^'和'$' 的行为

3).re.S 点任意匹配模式,改变'.'的行为

4).re.L 是预定字符类\w\W\b\B\s\S 区域设定

5).re.U 是预定字符类\w\W\b\B\s\S\d\D 取决于unicode定义

6).re.X 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释

四、方法

re.findall  

▪匹配出字符串中所有与指定值相关的值

▪以列表的形式返回

▪未匹配则返回空列表

#!/usr/bin/python  

#author bobo

#_*_ coding: utf-8 _*_

import json

import re

filename='info1.log'

dict1={}

with open(filename) as fh:

  for line in fh:

     hanzi=re.compile('')

     ##print(line)

     result=re.compile('"phoneNum":"[0-9]+"')

     str=result.findall(line)

     print(str)

匹配出号码['"phoneNum":"1317588****"']

re.match

re.match 尝试从字符串的起始位置匹配一个模式

如果不是起始位置匹配成功的话,match()就返回none

re.search

扫描整个字符串并返第一个成功的匹配

re.search(pattern, string, flags=0)

re.compile

re.compile 是将正则表达式转换为模式对象

re.sub 替换字符串

re.sub('被替换的','替换成的',a)