正则表达式通俗理解(浅浅分享一下正则表达式)
正则表达式通俗理解(浅浅分享一下正则表达式).结果字符字符含义实例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}这六种匹配符号默认都是贪婪匹配的,即会尽可能多地匹配符合条件的内容。

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

结果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          




