接上个博客:

python正则re学习记录(之一)


匹配某种字符类型

反斜杠后面接一些字符,表示匹配 某种类型 的一个字符。

例如:

字符 解释 等价表达式
\d 匹配0-9之间任意一个数字字符 [0-9]
\D 匹配任意一个不是0-9之间的数字字符 [^0-9]
\s 匹配任意一个空白字符(包括 空格、tab、换行符等) [\t\n\r\f\v]
\S 匹配任意一个非空白字符 [^ \t\n\r\f\v]
\w 匹配任意一个文字字符(包括大小写字母、数字、下划线) [a-zA-Z0-9_]
\W 匹配任意一个非文字字符 [^a-zA-Z0-9_]

反斜杠也可以用在方括号里面,比如 [\s,.] 表示匹配 : 任何空白字符, 或者逗号,或者点


[ ] 匹配几个字符之一

[ ]表示要匹配指定的几个字符之一

例如:
[xyz]可以匹配 x, y, 或者 z 里面的任意一个字符。等价于 [x-z]
[x-z] 中间的 - 表示一个范围从x 到 z

  • 一些 元字符 在 方括号内失去了魔法, 变得和普通字符一样了。
    例如:
    [akm.] 匹配 a k m . 里面任意一个字符,其中 . 不在表示匹配任意字符

  • 如果在方括号中使用 ^ , 表示方括号里面的字符集合。
    例如:
    [^\d] 表示,选择非数字的字符


    起始、结尾位置和 单行、多行模式

    ^表示匹配文本的 开头 位置。

  • 如果是 单行模式 ,表示匹配 整个文本 的开头位置。
    如果是 多行模式 ,表示匹配 文本每行 的开头位置。

$ 表示匹配文本的 结尾 位置。

  • 如果是 单行模式 ,表示匹配 整个文本 的结尾位置。
    如果是 多行模式 ,表示匹配 文本每行 的结尾位置。

    | 匹配两者之一

    竖线表示匹配 前者 后者


    () 分组

    就是把正则表达式匹配的内容里面其中的某些部分标记为某个组。而且可以标记多个组

例如:

我们一段话中需要匹配多个地方

百度的网址是baidu.com
谷歌的网址是google.com
yuaneuro的博客的网址是yuaneu.ro

我们需要匹配网站名称网址就可以这样写
^ (.+) 的.{3} (.+)
这样就把网站名称和网址单独的放在组group中了。

import re

content = '''百度的网址是baidu.com
谷歌的网址是google.com
yuaneuro的博客的网址是yuaneu.ro'''

p = re.compile(r'^(.+)的.{3}(.+)', re.MULTILINE)
for one in p.findall(content):
    print(one)

运行结果:

('百度', 'baidu.com')
('谷歌', 'google.com')
('yuaneuro的博客', 'yuaneu.ro')

当有多个分组的时候,我们可以使用 (?P<分组名>...) 这样的格式,给每个分组命名。
例如上面的例子就可以用^(?P<name>.+)的.{3}(?P<url>.+)

import re

content = '''百度的网址是baidu.com
谷歌的网址是google.com
yuaneuro的博客的网址是yuaneu.ro'''

p = re.compile(r'^(?P<name>.+)的.{3}(?P<url>.+)', re.MULTILINE)
for match in p.finditer(content):
    print(match.group('name'))
    print(match.group('url'))

运行结果:

百度
baidu.com
谷歌
google.com
yuaneuro的博客
yuaneu.ro

python正则re学习记录(之三)

python正则re学习记录(之三)

最后修改:2020 年 04 月 19 日
如果觉得我的文章对你有用,请随意赞赏