接上个博客:

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


匹配某种字符类型

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

例如:

<font color="red">字符</font><font color="red">解释</font><font color="red">等价表达式</font>
\d匹配0-9之间任意一个数字字符[0-9]
\D匹配任意一个不是0-9之间的数字字符1
\s匹配任意一个空白字符(包括 空格、tab、换行符等)[tnrfv]
\S匹配任意一个非空白字符2
\w匹配任意一个文字字符(包括大小写字母、数字、下划线)[a-zA-Z0-9_]
\W匹配任意一个非文字字符3

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


[ ] 匹配几个字符之一

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

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

  • 一些 元字符 在 方括号内失去了魔法, 变得和普通字符一样了。
    例如:

[akm.] 匹配 a k m . 里面任意一个字符,其中 . 不在表示匹配任意字符

  • 如果在方括号中使用 ^ , 表示方括号里面的字符集合。
    例如:

[^\d] 表示,选择非数字的字符


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

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

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

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

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

| 匹配两者之一

竖线表示匹配 前者 后者


() 分组

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

例如:

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

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

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

import re

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

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

运行结果:

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

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

import re

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

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的博客
yuaneuro.cn

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

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


  1. 0-9
  2. tnrfv
  3. a-zA-Z0-9_
Last modification:April 19th, 2020 at 03:12 pm
如果觉得我的文章对你有用,请随意赞赏