Python知识锦集Python精选

Python web服务器1:正则表达式

2018-12-02  本文已影响7人  IIronMan

一、总体内容

二、正则表达式概述

三、re 模块(match是从头匹配)
在Python中需要通过正则表达式对字符串进行匹配的时候,可以使用一个模块,名字为re

四、匹配单个字符

字符 功能
. 匹配任意一个字符(除了\n
[] 匹配[]中列举的字符
\d 匹配数字,即 0-9
\D 匹配非数字,即不是数字
\s 匹配空白,即空格 tab
\S 匹配非空白
\w 匹配单词字符,即 a-zA-Z0-9_、汉字以及其他文字
\W 匹配非单词字符

五、匹配多个字符

字符 功能
* 匹配前一个字符出现0次或者无限次,即可有可无
+ 匹配前一个字符出现1次或者无限次,即至少有一次
? 匹配前一个字符出现1次或者0次,要么有一次,要么没有
{m} 匹配前一个字符出现 m 次
{m,n} 匹配前一个字符出现 m ~n 次

六、匹配开头结尾

字符 功能
^ 匹配字符串开头
$ 匹配字符串结尾
  • 只要是”^”这个字符是在中括号”[]”中被使用的话就是表示字符类的否定,如果不是的话就是表示限定开头。我这里说的是直接在”[]”中使用,不包括嵌套使用。
    其实也就是说”[]”代表的是一个字符集,”^”只有在字符集中才是反向字符集的意思。
  • 如:([^/]+(/[^ ]*) : 意思是 :[^/]:除了/以外,+:至少一个字符,/[^ ]*:表示除了空格,也就是到空格就不匹配了,*:表示匹配前一个字符出现0次或者无限次,即可有可无
  • ^:参考博客

七、匹配分组

字符 功能
| 匹配左右任意一个表达式
(ab) 将括号中字符作为一个分组
\num 引用分组num匹配到的字符串
(?P<name>) 分组起别名
(?P=name) 引用别名为name分组匹配到的字符串

八、re 模块的高级用法

九、python贪婪和非贪婪

十、r 的作用

>>> mm = "c:\\a\\b\\c"
>>> mm
'c:\\a\\b\\c'
>>> print(mm)
c:\a\b\c
>>> re.match("c:\\\\",mm).group()
'c:\\'
>>> ret = re.match("c:\\\\",mm).group()
>>> print(ret)
c:\
>>> ret = re.match("c:\\\\a",mm).group()
>>> print(ret)
c:\a
>>> ret = re.match(r"c:\\a",mm).group()
>>> print(ret)
c:\a
>>> ret = re.match(r"c:\a",mm).group()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'
>>>

说明: Python中字符串前面加上 r 表示原生字符串,与大多数编程语言相同,正则表达式里使用""作为转义字符,这就可能造成反斜杠困扰。假如你需要匹配文本中的字符"",那么使用编程语言表示的正则表达式里将需要4个反斜杠"\":前两个和后两个分别用于在编程语言里转义成反斜杠,转换成两个反斜杠后再在正则表达式里转义成一个反斜杠。

  • Python里的原生字符串很好地解决了这个问题,有了原生字符串,你再也不用担心是不是漏写了反斜杠,写出来的表达式也更直观。
 >>> mm = "c:\\a\\b\\c"
 >>> ret = re.match(r"c:\\a",mm).group()
 >>> print(ret)
 c:\a

解释:如果上面你不用 r,那么正则你需要写为:c:\\\\a,也就是转义,有了r,你就可以省掉了,r可以帮你自己动添加

上一篇 下一篇

猜你喜欢

热点阅读