正则表达式 re(python 实现)

Posted python黑科技

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式 re(python 实现)相关的知识,希望对你有一定的参考价值。

什么是正则表达式?


正则表达式是一个强大的处理文本的高效的工具

可用于分析用户输入是否合法、网页url分析、文本处理等操作。


正则表达式的基本规则


普通字符组 []
[]  普通字符组      [abc]        匹配一个字符  a或者b或者c
-   范围表示法      [a-z]        匹配一个字符  a到z中的


排除型字符组 [^]
[^abc]    匹配一个字符是除a b c 之外的所有字符
[^0-9]     匹配一个除了0到9字符之外的所有字符


字符组简记法
\d    包含所有数字字符     相当于  [0-9]
\w   包含所有单词字符      相当于 [0-9a-zA-z_] 注意还会匹配 _  下划线
\s    包含所有空白字符      相当于 有制表符\t 回车符 \r 换行符 \n等各种”空白字符”

\D  \W  \S  分别是  \d  \w  \s 的排除字符组
[\s\S]   [\d\D]   [\w\W]  都能表示匹配所有字符

\b  单词边界       \b[a-zA-Z]\b      匹配所有的单词
\B  非单词边界      匹配单词之间的字符


点号
.    特殊的元字符,  能匹配任意单个字符, 换行符 \n 除外.
(加S 编译标记能够匹配所有单个字符,包括换行符)

各种量词的转义


元字符转义
-  的转义 [-ab]   [a\-b]      匹配 -  a  b  三个字符

使用原生字符串不需要考虑转义  r”hello world”     python
^    定位到字符串的起始位置
$    定位到字符串的结束位置  这两个特殊字符能保证整个string都可以由pattern匹配时才算成功。

使用
re.search(r"^abc$",  "abc") != None  #=>True
       re.search(r"^abc$", "abcd") != None #=> False

匹配成功时,整个字符串都是abc


量词
{n}            之前的元素必须出现n次
{m,n}        之前的元素最少出现m次,最多出现n次
{m,}          之前的元素最少出现m次,出现次数无上限
{0,n}         之前的元素最少出现0 次,出现次数n次


常用量词
*    等价式 {0,}   可能出现, 也可能不出现,出现次数没有上限  
+   等价式{1,}   至少出现一次,出现次数没有上限
?    等价式{0,1}  至多出现一次,也可能不出现

{n}           \{n}              转义
{m,n}       \{m,n}
{m,}         \{m,}
{,n}          \{,n}
*                \*
+            \+
?             \?


则一匹配符   ” | ”   从多个模式中选择其一操作

at | home   匹配   at、home
r2d2 | c3p4  匹配  r2d2、c2p4


正则表达式 re(python 实现)


re模块: 核心函数和方法


compile(pattern, flags=0)
使用任何可选的标记来编译正则表达式的模式,然后返回一个正则表达式对象。

(在模式匹配之前,正则表达式模式必须编译成正则表达式对象。由于正则表达式在执行过程中将进行多次比较操作,因此强烈建议使用预编译。使用 compile() 函数进行预编译是提升性能的明智之举)


match(pattern, string, flags=0)
尝试使用带有可选标记的正则表达式的模式来匹配字符串。如果匹配返回匹配对象,否则返回 None

(match 从 string 头开始匹配)


search(pattern, string, flags=0)
使用可选标记搜索字符串第一次出现的正则表达式模式,如果匹配成功,就返回匹配对象,否则返回 None


findall(pattern, string, flags=0)
查找字符串中所有(非重复)的正则表达式模式,并返回一个匹配列表


finditer(pattern, string, flags=0)
与findall()函数相同, 但返回的不是一个列表,而是一个迭代器,对于每一次匹配对象都返回一个匹配对象


split(pattern, string, max=0)

根据正则表达式的模式分隔符, split函数将字符串分割为列表,然后返回成功匹配的列表,分割最多操作 max次


sub(pattern, repl, string, count=0)
使用repl 替换所有正则表达式的模式在字符串中出现的位置,除非定义count,否则就将替换所有出现的位置。



常用匹配对象方法


group(num=0)

返回整个匹配对象,或者编号为num的特定子组


groups(default=None)

返回一个包含所有匹配子组的元组(如果没有成功匹配,则返回一个空元组)


groupdict(default=None)

返回一个包含所有匹配子组的命名子组字典,所有的子组名称作为字典的键

(如果没有成功匹配,则返回一个空字典)



常用的模块属性


re.I    : 不区分大小写
re.L   : 根据本地所使用的语言环境通过\w、\W、\b、\B、\s、\S实现匹配
re.M  : 多行匹配,^和$  分别匹配目标字符串的起始和结尾,而不是严格的整个字符串本身。
re.S   : “.”(点号)能够匹配所有字符,包括换行符
re.X   :  通过反斜线转义,否则所有空格加上#(以及在该行中所有后续文字都被忽略,除非在一个字符串类中或者允许注释并且提高可读性



以上是关于正则表达式 re(python 实现)的主要内容,如果未能解决你的问题,请参考以下文章

python中的re模块

Python re模块与正则表达式详解

python知识-正则表达式re模块

python成长之路第三篇_正则表达式

python成长之路第三篇_正则表达式

Python之re模块实现正则表达式