接上个博客:
python正则re学习记录(之一)
匹配某种字符类型
反斜杠
后面接一些字符,表示匹配 某种类型
的一个字符。
例如:
字符 | 解释 | 等价表达式 |
---|---|---|
\d | 匹配0-9之间任意一个数字字符 | [0-9] |
\D | 匹配任意一个不是0-9之间的数字字符 | 1 |
\s | 匹配任意一个空白字符(包括 空格、tab、换行符等) | [\t\n\r\f\v] |
\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学习记录(之三)