https://www.jianshu.com/p/5b7adc5403c5
正则表达式的特殊符号
表示法 | 表述 | 正则表达式式例 |
literal | 匹配文本字符串的字面值 | foo |
re1 I re2 | 匹配正则表达式re1或re2 | foo l bar |
. | 匹配任何字符串(除了\n之外) | b.b |
^ | 匹配字符串起始部分 | ^Dear |
$ | 匹配字符串终止部分 | /bin/*sh$ |
* | 匹配0次或多次前面出现的正则表达式 | [A-Za-z0-9] |
+ | 匹配1次或多次前面出现的正则表达式 | [a-z]+.com |
? | 匹配0次或1次前面出现的正则表达式 | goo? |
{N} | 匹配N次前面出现的正则表达式 | [0-9]{3} |
{M,N} | 匹配M~N次前面出现的正则表达式 | [0-9]{5,9} |
[...] | 匹配来自字符集的任意单一字符 | [aeiou] |
[..x-y..] | 匹配x~y范围中的任意单一字符 | [0-9],[A-Za-z] |
[^...] | 不匹配此字符集中出现的任何一个字符,包括某一范围的字符 | [aeiou],[A-Za-z] |
(*l+l?l{})? | 用于匹配上面频繁出现符号的非贪婪版本(*、+、?、{}) | .*?[a-z] |
(...) | 匹配封闭的正则表达式,然后另存为子组 | ([0-9]{3})?,f(oo l u)bar |
特殊符号 | ||
\d | 匹配任何十进制数字,和[0-9]相同(\D与\d相反,不匹配任何非数值型的数字) | data\d.txt |
\w | 匹配任何字母数字字符,与[A-Za-z0-9_]相同(\W与之相反) | [A-Za-z_]\w+ |
\s | 匹配任何空格字符,与[\n\t\r\n\f]相同(与\S相反) | of\sthe |
\b | 匹配一个单词边界,也就是指单词和空格间的位置。 例如,“er\b”可以匹配“never”中的“er”,但不能匹配“verb”中的“er”(与\B相反) | \bThe\b |
\B | 匹配非单词边界 | “er\B”能匹配“verb”中的“er”, 但不能匹配“never”中的“er” |
\N | 匹配已保存的子组N(参加上面的(...)) | price:\16 |
\c | 逐字匹配任何特殊字符c | .,\,* |
\A(\Z) | 匹配字符串的起始(参见上面^$) | \ADear |
扩展表示法 | ||
(?iLmsux) | 在正则表达式中嵌入一个或者多个特殊“标记”参数(或者通过函数/方法) | (?x),(?im) |
(?:...) | 表示一个匹配不用保存的分组 | (?:\w+.)* |
(?P<name>...) | 像一个仅有name标识而不是数字ID标识的正则分组匹配 | (?P<data>) |
(?P=name) | 在同一字符串中匹配由(?P<name)分组的之前文本 | (?P=data) |
(?#...) | 表示注释,所有内容都被忽略 | (?#comment) |
(?=...) | 如果...跟在字符串后面才做匹配,非获取匹配;称作正向前视断言 | (?=.com) |
(?!...) | 如果...不跟在后面才做匹配操作,非获取匹配;称作负向前断言 | (?!.net) |
(?<=...) | 如果...出现在字符串前面才做匹配,称作正向后视断言 | (?<=800-) |
(?<!...) | 如果...不出现在字符串前面才做匹配,称作负向后断言 | (?<!192.168.) |
(?(id/name)Y l N) | 如果分组提供的id或name(名称)存在,就返回正则表达式的条件匹配Y, 如果不存在,就返回N;l N是可选项 | (?(1)y l x) |
正则表达式和Python语言
Python语言中使用re模块的方法支持正则表达式。这里列出re模块常见的函数以方便查询(后面会介绍主要的函数使用方法)
函数 | 描述 |
仅仅是re模块函数 | |
compile(pattern, flags = 0) | 使用任何可选的标记来编译正则表达式的模式,然后返回一个正则表达式对象 |
re模块函数和正则表达式对象的方法 | |
match(pattern, string, flags = 0) | 尝试使用带有可选的标记的正则表达式的模式来匹配字符串。如果匹配成功就返回匹配对象,如果失败就返回None |
search(pattern, string, flags = 0) | 使用可选标记搜索字符串中第一次出现的正则表达式模式。如果匹配成功就返回匹配对象,如果失败就返回None |
findall(pattern, string [, flags]) | 查找字符串中所有(非重复)出现的正则表达式模式,并返回一个匹配列表 |
finditer(pattern, string[, flags]) | 与findall()函数相同,但返回的不是一个列表,而是一个迭代器。对于每一次匹配,迭代器都返回一个匹配对象 |
split(pattern, string, max=0) | 根据正则表达式的模式分隔符,split函数将字符串分隔为列表,然后返回成功匹配的列表,分隔最多操作max次(默认分隔所有成功匹配的位置) |
sub(pattern, repl, string, count = 0) | 使用repl替换所有正则表达式的模式在字符串中出现的位置,除非定义count,否则就将替换所有出现的位置 |
purge() | 清除隐式编译的正则表达式模式 |
常用匹配对象方法 | |
group(num = 0) | 返回整个匹配对象,或者编号为num的特性子组 |
groups(default = None) | 返回一个包含所有匹配子组的元组(如果没有成功匹配,则返回一个空元组) |
groupdict(default = None) | 返回一个包含所有匹配的命名子组的字典,所有的子组名称作为字典的键(如果没有匹配成功,就返回一个空元组) |
常用模块属性(用于大多数正则表达式函数的标记) | |
re.I、re.IGNORECASE | 不区分大小写的匹配 |
re.L、re.LOCALE | 根据所使用的本地语言环境通过\w、\W、\b、\B、\s、\S实现匹配 |
re.M、re.MULTILINE | ^和$分别匹配目标字符串中行的起始和结尾,而不是严格匹配整个字符串本身的起始和结尾 |
re.S、re.DOTALL | .(点号)通常匹配除了\n之外的所有单个字符,该标记表示"."能够匹配全部字符 |
re.X、re.VERBOSE | 通过反斜线转译,否则所有空格加上#(以及在该行中所有后续文字)都被忽略,除非在一个字符类中或者允许注释并提高可读性 |