正则表达式学习

0x00 元字符

元字符是构造正则表达式的一种基本元素

0x01 常用元字符
元字符 解释
. 匹配除换行符以外的任意字符
\d 匹配数字(等价于[0-9])
\D 匹配非数字(等价于[^0-9])
\w 匹配数字、字母、下划线(等价于[0-9a-zA-Z_])
\W 匹配非数字字母下划线(等价于[^0-9a-zA-Z_])
\b 匹配单词的开始或结束
\s 匹配空白字符(等价于[\f\n\r\t\v])
\S 匹配非空白字符(等价于[^\f\n\r\t\v])
^ 匹配字符串的开始,放在模式中表示非
$ 匹配字符串的结束
0x02空白元字符
元字符 解释
\f 换页符
\n 换行符
\t 制表符tab键
\r 回车符
\v 垂直制表符
[\b] 回退并删除一个字符

注:在windows中经常使用\r\n来匹配文本行结束,在linux中可以使用\n 来匹配文本行结束

匹配空白行的正则表达式可以用 **[\r]?[\n][\r]?[\n]**表示

0x03特殊进制
  • 在正则表达式中十六进制需要用前缀\x来表示。

  • 在正则表达式中八进制需要用前缀\0来表示。

0x10 重复匹配

0x11 匹配一个或多个

要想匹配同一个字符的多次重复,只要在字符后加上”+“作为后缀就可以了。”+“匹配至少一次。比如[a-z]+ 表示匹配一个或多个连续的字母。

比如匹配一个简单的邮箱格式

 	test = "adjaisdjasod test@126.com. aaa.123@234.com djaidjqojwijdioqjwjdoq test@126.aaa.com"
    content = re.findall(r'([\w.]+@[\w.]+\.\w+)', test)
    print(content)
['test@126.com', 'test@126.aaa.com']

上面的表达式有一个严重的问题,如果出现文本 .test@126.com我们的表达式会失效

0x12 匹配0个或多个

如果想匹配一个可有可无的字符,只要在字符后加上”*“作为后缀就可以了。

继续拿邮箱作为例子

    test = ".test@126.com."
    content = re.findall(r'(\w+[\w.]*@[\w.]+\.\w+)', test)
    print(content)

只需要将 . 字符变成一个可选就解决了上面所述的问题

0x13 匹配0个或1个

如果只想匹配0个或者1个字符,那么只需要在字符后加上“?”作为后缀就可以了。即 将贪婪的*+变成非贪婪,贪婪和非贪婪后面会总结。

比如我们想匹配一段html中的标签,如果只是用<.*> 就会变成贪婪匹配,即匹配了整个字符串。

    test = '<p>123123</p>'
    content = re.findall(r'(<.*>)', test)
    print(content)
['<p>123123</p>']

如果我们加上 ? 将其变成非贪婪匹配,得到的就是单个标签了

    test = '<p>123123</p>'
    content = re.findall(r'(<.*?>)', test)
    print(content)
['<p>', '</p>']
0x14 匹配n次

正则表达式中重复次数的语法用元字符{}表示。

  • 如果想为重复匹配次数设定一个精准的次数,可以用{n}表示。{n} 意味着模式里前一个字符必须在原始文本里连续出现n次。

    	test = 'aabbcc123456'
        content = re.findall(r'[a-z]{3}', test)
        print(content)
    ['aab', 'bcc']
    

    如果将上面的次数改为4次,

        test = 'aabbcc123456'
      
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值