PYTHON--re模块与正则表达式

正则表达式

1. 通配符

点号可以匹配除了换行符外的任何单个字符。
特殊字符要转义
前面加\

2. 字符集

用中括号括住字符串来创建字符集。字符集能匹配它包括的所有字符。只能匹配一个字符。

'[^abc]'     # 可以匹配除了abc之外的字符
3. 选择符和子模式
'p(ython|erl)'  # 匹配两个字符串
4. 可选项和重复子模式

在子模式后面加上问号,就变成可选项。

r'(http://)?(www\.)?python\.org'

能匹配到下列字符串而没有其他模式:

'http://www.python.org'
'http://python.org'
'www.python.org'
'python.org'
  • 可选子模式互相独立。
    每个可选子模式都用圆括号括起来。
    使用原始字符串减少反斜线的数量。
    对点好做了转义,防止它成为通配符使用。

  • 以下运算符可以允许子模式重复多次:

(pattern)*:重复零次以上
(pattern){m,n}:重复m-n次
(pattern)+:重复一次以上
'^ht+p'只在字符串开头而不是其他位置匹配
$字符串结尾用$标
  • 常见正则:
    \W 匹配任意不是字母,数字,下划线,汉字的字符
    \S 匹配任意不是空白符的字符
    \D 匹配任意非数字的字符
    \B 匹配不是单词开头或结束的位置
    [^x] 匹配除了x以外的任意字符

re模块内容

1.compile

re.compile(pattern[,flags])
将含正则表达式的字符串的转换为模式对象。

第二个参数flag是匹配模式,取值可以使用按位或运算符’|’表示同时生效,比如re.I | re.M。另外,你也可以在regex字符串中指定模式,比如re.compile(‘pattern’, re.I | re.M)与re.compile(‘(?im)pattern’)是等价的。
可选值有:

re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
M(MULTILINE): 多行模式,改变’^’和’$’的行为
S(DOTALL): 点任意匹配模式,改变’.’的行为
L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。以下两个正则表达式是等价的:

2.search

search(pattern,string[,flags])
在给定字符串中寻找第一个匹配的子串,一旦给定,就返回MatchObject(真值),否则返回false。函数在字符串内查找模式,直到找到第一个就退出,查找不到返回None,其参数和re.match一致。而与match的区别在于,match只是匹配字符串的开始,而search匹配整个字符串

3.match

match(pattern,string[,flags])
re.match从字符串的开始匹配一个模式,第一个参数是正则表达式,第二个字符串是要匹配的字符串,第三个参数是标志位,缺省为0;如果可以查找到则返回一个match对象,否则返回None。

>>> import re
>>> re.match("c","cdkfje")
<_sre.SRE_Match object at 0x00000000027D2D30>
>>> re.search("c","abcdef")
<_sre.SRE_Match object at 0x00000000027D2B28>
4.findall

re.findall(pattern,string)
可以获取所有匹配的字符串,并且以list形式返回。

5.split

re.split(pattern,string[,count=0])
会根据模式匹配分割字符串

6.escape

escape(string)
字符串的正则式:前面加r
例如查找标点符号:

>>> text = '"hm...err -- are you suere ? "he said ,sountg ing.'
>>> import re
>>> pat = r'[.?/,"]+'
>>> re.findall(pat,text)
['"', '...', '?', '"', ',', '.']
7.分组

re模块中能够匹配时,会返回MatchObject对象。他们还包含匹配了子字符串哪部分的信息。称为group。
简单说,group就是圆括号内的子模式。group的序号取决于它左侧的括号数。小组是从左向右计数的,从1开始。组可以被嵌套。计数的数值可以能过从左到右计算打开的括号数来确定。

>>>p=re.compile('(a(b)c)d')
>>> m = p.match('abcd')
>>> m.group(0)
 'abcd'
>>> m.group(1)
 'abc'
>>> m.group(2)
 'b'
  • 对MatchObject类的方法有:
    group ([序号]) 获取给定组的匹配项
    start()默认0是整个组,从1开始索引
    end()
    span()返回一个组的开始和结束位置
8.sub

作为替换组号和函数
re.sub()
sub(replacement, string[, count = 0])
对于输入的一个字符串,利用正则表达式(的强大的字符串处理功能),去实现(相对复杂的)字符串替换处理,然后返回被替换后的字符串

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值