Python中的正则表达式

85 阅读3分钟

正则表达式让我们在符合特定格式的字符串中寻找内容。

通过用特殊的语法制定一个正则表达式,你可以

  • 搜索一个字符串的文本
  • 替换一个字符串中的子串
  • 从一个字符串中提取信息

re Python 标准库模块为我们提供了一套处理正则表达式的工具。

特别是在其他方面,它为我们提供了以下功能。

  • re.match() 检查在字符串的开头是否匹配
  • re.search() 检查字符串中的任何地方是否匹配

这两个函数都需要3个参数:模式、要搜索的字符串标志

在讨论如何使用它们之前,让我们介绍一下正则表达式模式的基本知识。

模式是一个用r'' 分隔符包裹的字符串。在它里面,我们可以使用一些特殊的字符组合,可以用来捕获我们想要的值。

例如。

  • . 匹配单个字符(换行字符除外)
  • \w 匹配任何字母数字字符 ( )[a-zA-Z0-9_]
  • \W 匹配任何非字母数字字符
  • \d 匹配任何数字
  • \D 匹配任何非数字的东西
  • \s 匹配空白处
  • \S 匹配任何不属于空白的东西

方括号可以包含多个字符的匹配:[\d\sa] 匹配数字和空白,以及字符a[a-z] 匹配从az 的字符。

\ 可以用来转义,例如,要匹配点 ,你应该在你的模式中使用 。. \.

| 表示

然后我们有锚点。

  • ^ 匹配一个行的开头
  • $ 匹配行尾

然后,我们有数量修饰符。

  • ? 表示 "零或一 "的出现
  • * 意味着 "零或更多 "的出现
  • + 表示 "一个或更多 "的出现
  • {n} 意味着 "正好是 "的出现n
  • {n,} 意味着 "至少 "的出现n
  • {n, m} 意味着 "至少 ,最多 "的出现。n m

括号,(<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风味。