匹配字符用到的元字符

记录于https://docs.python.org/zh-cn/3/howto/regex.html
匹配字符
大多数字母和符号都会简单地匹配自身。例如,正则表达式 test 将会精确地匹配到 test 。(你可以启用不区分大小写模式,让这个正则也匹配 Test 或 TEST ,稍后会详细介绍。)

但该规则有例外。有些字符是特殊的 元字符(metacharacters),并不匹配自身。事实上,它们表示匹配一些非常规的内容,或者通过重复它们或改变它们的含义来影响正则的其他部分。本文的大部分内容都致力于讨论各种元字符及其作用。

下边是元字符的完整列表。它们的含义将在本 HOWTO 的其余部分进行讨论。

. ^ $ * + ? { } [ ] \ | ( )

首先介绍的元字符是 [ 和 ] 。这两个元字符用于指定一个字符类,也就是你希望匹配的字符的一个集合。这些字符可以单独地列出,也可以用字符范围来表示(给出两个字符并用 ‘-’ 分隔)。例如,[abc] 将匹配 a、b、c 之中的任意一个字符;这与 [a-c] 相同,后者使用一个范围来表达相同的字符集合。如果只想匹配小写字母,则正则表达式将是 [a-z] 。

元字符(除了 \)在字符类中是不起作用的。 例如,[akm$] 将会匹配以下任一字符 ‘a’, ‘k’, ‘m’ 或 $ 。$ 通常是一个元字符,但在一个字符类中它的特殊性被消除了。

你可以通过对集合 取反 来匹配字符类中未列出的字符。方法是把 ‘^’ 放在字符类的最开头。 例如,[^5] 将匹配除 ‘5’ 之外的任何字符。 如果插入符出现在字符类的其他位置,则它没有特殊含义。 例如:[5^] 将匹配 ‘5’ 或 ‘^’。

也许最重要的元字符是反斜杠,\ 。 与 Python 字符串字面量一样,反斜杠后面可以跟各种字符来表示各种特殊序列。它还用于转义元字符,以便可以在表达式中匹配元字符本身。例如,如果需要匹配一个 [ 或 \ ,可以在其前面加上一个反斜杠来消除它们的特殊含义:[ 或 \ 。

一些以 ‘’ 开头的特殊序列表示预定义的字符集合,这些字符集通常很有用,例如数字集合、字母集合或非空白字符集合。

让我们举一个例子:\w 匹配任何字母数字字符。 如果正则表达式以 bytes 类型表示,\w 相当于字符类 [a-zA-Z0-9_] 。如果正则表达式是 str 类型,\w 将匹配由 unicodedata 模块提供的 Unicode 数据库中标记为字母的所有字符。 通过在编译正则表达式时提供 re.ASCII 标志,可以在 str 表达式中使用较为狭窄的 \w 定义。

以下为特殊序列的不完全列表。 有关 Unicode 字符串正则表达式的序列和扩展类定义的完整列表,参见标准库参考中 正则表达式语法 的最后一部分 。通常,Unicode 版本的字符类会匹配 Unicode 数据库的相应类别中的任何字符。

\d
匹配任何十进制数字,等价于字符类 [0-9] 。

\D
匹配任何非数字字符,等价于字符类 [^0-9] 。

\s
匹配任何空白字符,等价于字符类 [ \t\n\r\f\v] 。

\S
匹配任何非空白字符,等价于字符类 [^ \t\n\r\f\v] 。

\w
匹配任何字母与数字字符,等价于字符类 [a-zA-Z0-9_] 。

\W
匹配任何非字母与数字字符,等价于字符类 [^a-zA-Z0-9_] 。

这些序列可以包含在字符类中。 例如,[\s,.] 是一个匹配任何空白字符、‘,’ 或 ‘.’ 的字符类。

本节的最后一个元字符是 . 。 它匹配除换行符之外的任何字符,并且有一个可选模式( re.DOTALL ),在该模式下它甚至可以匹配换行符。 . 通常用于你想匹配“任何字符”的场景。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值