快捷搜索:  汽车  科技

正则表达式通俗理解(浅浅分享一下正则表达式)

正则表达式通俗理解(浅浅分享一下正则表达式).结果字符字符含义实例abc

正则表达式,又称规则表达式,通常被用来检索、替换那些符合某个模式(规则)的文本。

使用正则表达式之前一定要先导入re模块(import re)

有一点需要特别注意的是,正则表达式使用 对特殊字符进行转义,所以如果我们要使用原始字符串,只需加一个 r 前缀,如r'a.c'。

1.正则表达式的匹配规则

可在网站里一个一个试一试,测试网站为https://regex101.com/

字符

字符含义

实例abc

结果

.

匹配任意字符,换行符“\n”除外

a.c

abc

\

转义字符,使后一个字符改变原来的意思

a\.c

None

[...]

字符集(字符类),对应的位置可以是字符集中的任意字符,字符集中的字符集可逐个列出,也可以给出范围,如[abc]或[a-c]

a[b-z]c

abc

预定字符集:实例abc1314520

\d

匹配数字:[0-9]

(\d)

1314520

\D

匹配非数字:[^\d]

(\D)

abc

\s

匹配空白字符:[<空格>、\t\r\n\f\v]

(\s)

None

\S

匹配非空白字符

(\S)

abc1314520

\w

单词字符:[a-zA-Z0-9]

(\w)

abc1314520

\W

非单词字符

(\W)

None

数量词(用在字符或(...)之后):实例aabc

*

匹配前一个字符0或无限次

a*b

aab

匹配前一个字符1或无限次

a b

aab

匹配前一个字符0或1次

a?c

c

{m}

匹配前一个字符m次

a{2}

aa

{m n}

匹配前一个字符m到n次,若m缺省,则匹配0到n次,若n缺省 则匹配m到无限次

a{1 3}

aa

边界匹配(不消耗待匹配字符串中的字符)

^

①匹配字符串开头

|

"|"代表左右表达式任意匹配一个,相当于“或”。它总是先尝试匹配左边的表达式,一旦成功则跳过匹配右边的表达式,若“|”没有被包括在()中,则它的整个范围是整个正则表达式

(...)

被括起来的表达式作为一个整体,从表达式左边开始每遇到一个分组的左括号“(”,编号 1

(?P<name>...)

分组,除了原有的编号外再指定一个额外的别名,如(?P<id>abc)

\<number>

引用编号为<number>的分组匹配到的字符串,如abc\1

(?P=name)

引用别名为<name>的分组匹配到的字符串,如(?P=id)

贪婪匹配与懒惰匹配

* ? {m} {m } {m n}这六种匹配符号默认都是贪婪匹配的,即会尽可能多地匹配符合条件的内容。

正则表达式通俗理解(浅浅分享一下正则表达式)(1)

结果:bcbc

非贪婪匹配很简单,就是在上述六种贪婪匹配符号后面加上问号?,即*? ? ?? {m}? {m }? {m n}?。

正则表达式通俗理解(浅浅分享一下正则表达式)(2)

结果bc

各种方法

match、search、findall、finditer、sub方法,match\search的结果可用“.group”成组打印。

match

查找字符串的头部(也可以指定起始位置),它是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果。它的一般使用形式如下:

match(string[ pos[ endpos]])

search

查找字符串的任何位置,它也是一次匹配,只要找到了一个匹配的结果就返回,而不是查找所有匹配的结果,它的一般使用形式如下:

search(string[ pos[ endpos]])

findall

findall 以列表形式返回全部能匹配的子串,如果没有匹配,则返回一个空列表

findall 方法的使用形式如下:

findall(string[ pos[ endpos]])

finditer

finditer 方法的行为跟 findall 的行为类似,也是搜索整个字符串,获得所有匹配的结果。但它返回一个顺序访问每一个匹配结果(Match 对象)的迭代器。

sub

sub 方法用于替换。它的使用形式如下:

sub(repl string[ count])

以match方法为例:

import re test='abc12345' a=re.match(r"abc" test) print(a) print(a.group())

结果:

<re.Match object; span=(0 3) match='abc'> abc

猜您喜欢: