菜鸟的python正则表达式学习过程

一.正则基本概念:
1.
\d ——匹配数字;
\w ——匹配数字+字母
\b ——匹配单词的便捷
\s ——匹配空格符
[特殊字符] ——匹配特殊字符
2.
+——匹配至少一个字符
* ——匹配任意个字符
? ——匹配0或者1个字符
{n} ——匹配n个字符
{n,m} ——匹配n-m个字符
3.
[] ——表示精确匹配
| ——表示or的意思
^ ,$ ——分别表示行的开始和结束

二.python中的正则相关的函数,可查看菜鸟教程:
https://www.runoob.com/python/python-reg-expressions.html

  1. re.match(【正则表达式】,【待匹配的字符串】),返回值是object对象
    eg: import re
    //r" xxx"的表达式python中常用的正则的表达方式,不是必须的但是使用更加友好
    re.match(r’^\d{3}-\d{3,8}$’, ‘010-12345’)
    输出:<_sre.SRE_Match object; span=(0, 9), match=‘010-12345’>
  2. 切分字符串
    re.split(r’\s+’, ‘a b c’)
    输出:[‘a’, ‘b’, ‘c’]
  3. 分组,用()表示的就是要提取的分组(Group)。比如:
    ^(\d{3})-(\d{3,8})$分别定义了两个组,可以直接从匹配的字符串中提取出区号和本地号码:group(0)永远是原始字符串,group(1)、group(2)……表示第1、2、……个子串。
    m = re.match(r’^(\d{3})-(\d{3,8})$’, ‘010-12345’)
    m.group(0)
    输出:‘010-12345’
  4. findall(r’ xxx’,s) ——s字符串中符合正则表达式的子串

三、贪婪模式和非贪婪模式
贪婪模式是从后往前匹配,匹配不上就去掉字符串最后一位,直到匹配成功;
非贪婪模式也叫作懒惰模式,从前往后匹配,一旦匹配成功就停止;
eg:s = ababaaba
p1 = r’\a.b’
贪婪模式匹配结果:ababaab
非贪婪模式匹配结果:ab

四、练习题

  1. 验证email地址
    def is_valid_email(addr):
    addr_ex = re.compile(r’[0-9a-zA-Z._\s]+[@][0-9a-zA-Z._]’)
    if addr_ex.match(addr):
    return True
    else:
    return False

    //测试:
    assert is_valid_email(‘[email protected]’)
    assert is_valid_email(‘[email protected]’)
    assert not is_valid_email(‘bob#example.com’)
    assert not is_valid_email(‘[email protected]’)
    print(‘ok’)

  2. 匹配一行文字中的所有开头的字母内容
    s1 = “i love you not because of who you are, but because of who i am when i am with you”
    content = re.findall(r"\b\w", s1)
    print (content)

    //匹配一行文字中的所有开头的数字内容
    s2=“i love you not because 12sd 34er 56df e4 54434”
    content2 = re.findall(r’\b\d’,s2)
    print(content2)

  3. #将以下网址提取出域名:
    s = “”“http://www.interoem.com/messageinfo.asp?id=35`
    http://3995503.com/class/class09/news_show.asp?id=14
    http://lib.wzmc.edu.cn/news/onews.asp?id=769
    http://www.zy-ls.com/alfx.asp?newsid=377&id=6
    http://www.fincm.com/newslist.asp?id=415"”"
    p = r’(http://.+?/).+’
    print(re.sub(p,lambda x :x.group(1),s))

  4. 提取出如下字符串中的单词:
    s = “hello world ha ha”
    p = r’\s+’
    print(re.split(p,s))
    print(re.findall(r’\w+’,s))

发布了24 篇原创文章 · 获赞 0 · 访问量 2061

猜你喜欢

转载自blog.csdn.net/Poppy_tester/article/details/104995725