Python正则表达式

来源:互联网 发布:杭州贰贰网络 编辑:程序博客网 时间:2024/06/02 01:18

本文档原文来自:http://www.imooc.com/learn/550

    • 正则表达式的概念
    • python的第一个正则表达式
    • Python正则表达式的基本语法


正则表达式的概念

1. 使用单个字符串来描述匹配一系列符合某个语法规则的字符串;2. 是对字符串操作的一种逻辑公式;3. 应该场景:处理文本和数据;4. 正则表达式的过程:依次拿出表达式和文本进行比较操作,如果每一个字符都匹配成功,则成功,否则匹配失败

python的第一个正则表达式

**import re**: Python正则表达式模块re.compile(字符串模板)pattern.match(被匹配的字符串)字符串模板-->Pattern-->Match-->Result
    import re    str = 'Hello python'    pa_1 = re.compile(r'Hello')#前面的r表示匹配模板的字符串是元字符串,这样就生成了一个pattern的实例    ma = pa_1.match(str)#ma是一个match对象    print ma_1.group()#返回匹配到的字符串    print ma_1.span()#返回被匹配字符串在原字符串的索引位置    pa_2 = re.compile(r'hello', re.I)#表示忽略大小写    ma = pa_2.match(str)#此时str字符串无论包含大写字符还是小写字符都会被匹配出来

注意点:
- 最好使用元字符串‘r’
- 最好生成一个pattern对象去match字符串

Python正则表达式的基本语法

  • . 匹配任意字符(除了\n)
  • […] 匹配字符集
>>> ma = re.match(r'[abc]', 'a')>>> ma.group()a>>> ma = re.match(r'[abc]', 'd')>>> ma    #结果显示为空,说明ma没有匹配到正确的结果>>> ma = re.match(r'[a-z]', 'd')>>> ma.group()d #[a-z]表示匹配a-z的任何字符>>> ma = re.match(r'[a-zA-Z]', 'A')>>> ma.group()A>>> ma = re.match(r'[a-zA-Z0-9]', '9')>>> ma.group()9
  • \d / \D 匹配数字/非数字
  • \s / \S 匹配空白/非空白字符
  • \w / \W 匹配单个字符[a-z A-Z 0-9] / 非单个字符
  • * 匹配前一个字符0次或者无限次
>>> ma = re.match(r'[A-Z][a-z]', 'Aa')Aa>>> ma = re.match(r'[A-Z][a-z]', 'A')>>> ma     #结果显示为空,说明ma没有匹配到正确的结果>>> ma = re.match(r'[A-Z][a-z]*', 'A') #匹配字符集[a-z]的0个或者无限个字符>>> ma.group()A>>> ma = re.match(r'[A-Z][a-z]*', 'Abcdefg') #匹配字符集[a-z]的0个或者无限个字符>>> ma.group()Abcdefg>>> 
  • + 匹配前一个字符1次或者无限次
>>> ma = re.match(r'[_a-zA-Z]+[\w]*', '_http123') #表示匹配前一个字符集中的字符1次或者无限次,后一个字符集中的字符0次或者无限次>>> ma.group()_http123
  • ? 匹配前一个字符0次或者1次
>>> ma = re.match(r'[1-9]?[0-9]', '90')>>> ma.group()90>>> ma = re.match(r'[1-9]?[0-9]', '09')>>> ma.group()0
  • {m} / {m,n} 匹配前一个字符m次或者m到n次
 #可以用来匹配一个有效的邮箱    >>> ma = re.match(r'[a-zA-Z0-9]{6}', 'ABC123') #表示出现字符集中的字符必须6次>>> ma.group()abc123>>> ma = re.match(r'[a-zA-Z0-9]{6}', 'ABC12')>>> ma    #结果显示为空,说明ma没有匹配到正确的结果>>> ma = re.match(r'[a-zA-Z0-9]{6}@qq.com', 'abc123@qq.com')>>> ma.group()abc123@qq.com>>> ma = re.match(r'[a-zA-Z0-9]{6,10}@qq.com', 'abcd1234@qq.com') #出现字符集中的字符6到10次>>> ma.group()abcd1234@qq.com
  • *? / +? / ?? 匹配模式为非贪婪模式(尽可能少匹配字符)
>>> ma = re.match(r'[0-9][a-z]*', '2ba')>>> ma.group()2ba>>> ma = re.match(r'[0-9][a-z]*?', '2ba')>>> ma.group()2
原创粉丝点击