正则表达式让我们在符合特定格式的字符串中寻找内容。
通过用特殊的语法制定一个正则表达式,你可以
- 搜索一个字符串的文本
- 替换一个字符串中的子串
- 从一个字符串中提取信息
re Python 标准库模块为我们提供了一套处理正则表达式的工具。
特别是在其他方面,它为我们提供了以下功能。
re.match()检查在字符串的开头是否匹配re.search()检查字符串中的任何地方是否匹配
这两个函数都需要3个参数:模式、要搜索的字符串和标志。
在讨论如何使用它们之前,让我们介绍一下正则表达式模式的基本知识。
模式是一个用r'' 分隔符包裹的字符串。在它里面,我们可以使用一些特殊的字符组合,可以用来捕获我们想要的值。
例如。
.匹配单个字符(换行字符除外)\w匹配任何字母数字字符 ( )[a-zA-Z0-9_]\W匹配任何非字母数字字符\d匹配任何数字\D匹配任何非数字的东西\s匹配空白处\S匹配任何不属于空白的东西
方括号可以包含多个字符的匹配:[\d\sa] 匹配数字和空白,以及字符a 。[a-z] 匹配从a 到z 的字符。
\ 可以用来转义,例如,要匹配点 ,你应该在你的模式中使用 。. \.
| 表示或
然后我们有锚点。
^匹配一个行的开头$匹配行尾
然后,我们有数量修饰符。
?表示 "零或一 "的出现*意味着 "零或更多 "的出现+表示 "一个或更多 "的出现{n}意味着 "正好是 "的出现n{n,}意味着 "至少 "的出现n{n, m}意味着 "至少 ,最多 "的出现。nm
括号,(<expression>) ,创建一个组。组是有趣的,因为我们可以捕捉到组的内容。
这2个例子与整个字符串相匹配。
re.match('^.*Roger', 'My dog name is Roger')
re.match('.*', 'My dog name is Roger')
打印这些语句中的一个,会产生这样的字符串。
<re.Match object; span=(0, 20), match='My dog name is Roger'>
如果你把结果赋给一个result 变量,并对其调用group() ,你会看到匹配的结果。
result = re.match('^.*Roger', 'My dog name is Roger')
print(result.group())
# My dog name is Roger
让我们试着获取狗的名字,如果你不知道狗的名字会是什么,你可以寻找 "名字是",然后添加一个组,像这样。
result = re.search('name is (.*)', 'My dog name is Roger')
result.group() 将打印 "name is Roger",而 将打印该组的内容,"Roger"。result.group(1)
print(result.group()) # name is Roger
print(result.group(1)) # Roger
我提到re.search() 和re.match() 将标志作为第三参数。我们有几个可能的标志,最常用的是re.I ,进行不区分大小写的匹配。
这只是对正则表达式的一个介绍,从这个开始,你可以进入很多的兔子洞。
我建议在regex101.com上尝试你的正则表达式,以确保正确性。确保你选择了侧边栏中的Python风味。
