首页 > 代码库 > python 优雅的使用正则表达式 ~ 2

python 优雅的使用正则表达式 ~ 2

使用正则表达式

那些基础的理论也说了不少了现在就开始 实操 ( 不知道为啥特别喜欢这个词... ) 吧 .

上一节课说过 正则表达式也是一门语言 , 他被集成到了python当中 , 并且用 re 模块为正则表达式提供了一个接口 . 正则表达式 是用C 语言写的 , 所以效率很高 , 我们将正则表达式编译为模式对象 , 并且用他们来进行匹配 , 这也是为了提高效率 , 后面我们会经常用到 " 模式 " , 指的就是讲正则表达式

编译正则表达式 . 

正则表达式被编译为模式对象 , 该对象拥有各种方法供你操作字符串 , 如查找模式匹配或执行字符串替换 . 

>>> import re>>> p = re.compile(ab*) # a 和 一到正无穷个b┌──────────────────────────────────────────────────────────────┐│ re.compile: (pattern, flags=0)                               ││ Compile a regular expression pattern, returning a pattern ob ││ ject.                                                        │└──────────────────────────────────────────────────────────────┘

从上面可以看出,re.compile() 也可以接受flags参数,用于开启各种特殊功能和语法变化 .

1 >>> p = re.compile(ab*,re.IGNORECASE)

正则表达式作为一个字符串参数传给了 re.compile(). 由于正则表达式并不是 python的核心部分 , 因此没有为他提供特殊的语法支持 , 所以正则表达式只能 以字符串的形式表示 . (有些应用根本就不需要正则表达式 , 所以python社区的小伙伴们认为没有必要将其纳入python的核心 )  相反 , re 模块仅仅是作为 C 的扩展模块包含在python中 , 就像socket模块和zlib模块

正因为 \ 的强大 , 和功能的多 , 所以 \ 也有很多麻烦的地方 .

匹配字符匹配阶段
\select需要匹配的字符串
\\select正则表达式需要用\\来表示\
\\\\select不巧python也需要用\\来表示\
1*2*2 所以就用了四个\

简言之为了匹配反斜杠这个字符我们需要在字符串中使用四个反斜杠才行 , 这在正则表达式中本来 \ 久用的频繁 , 这样就更多了 . 吓人 !

有问题就有接近越方案 , 方法就是用原始字符串来表示正则表达式 . ( r‘ xxx   ‘  Do you Remember ?)

正则字符串原始字符串
"ab*"r"ab*"
"\\\\select"r"\\select"
"\\w+\\s+\\1"r"\w+\s+\1"
python也需要用\\来表示\ 哦

 

python 优雅的使用正则表达式 ~ 2