python 正则表达式提取匹配对象

python regex extract match object

之前有人问过这个问题,但我想重新提出这个问题,以提供另一个(可能更简单、更切题)不同的例子。

考虑以下 python 正则表达式及其结果。

import re

t = "The rain falls in Spain"
x = re.search("^The.*Spain$", t)

if x:
  print("There's a match!")
else:
  print("There's no match")

print (x)

产生以下结果:

There's a match!
<re.Match object; span=(0, 23), match='The rain falls in Spain'>

我的问题很简单。

如何从结果中得到匹配对象?

大多数其他问题似乎都以许多不同的语言来解决这个主题。 python上的几个好像用的是compile,反正我也不是很懂,请问有没有其他的方法呢?我认为最简单的方法通常是最好的。

假设您要在较大的字符串中查找短语“The rain falls in Spain”:

import re

t = "Hello G'day. The rain falls in Spain. Testing 123."
x = re.search("The.*Spain", t)

if x:
  print("There's a match!")
  print(f'The match is: {x.group(0)!r}')
  print('The span is:', x.span(0))
else:
  print("There's no match")

print(x)

输出:

There's a match!
The match is: 'The rain falls in Spain'
The span is: (13, 36)
<re.Match object; span=(13, 36), match='The rain falls in Spain'>

我改了什么:

  • 我从正则表达式中删除了 ^$,因为我们不想明确检查字符串的开头和结尾。所需的匹配项也可以位于字符串中的某处。
  • 使用语法 x.group(n) 访问捕获的组号 n。在上面的示例中,您还可以使用 x.group() 作为获取第一个捕获组(即第一个匹配项)的快捷方式
  • 使用语法 x.span(n) 访问捕获组 n(即匹配项)的输入字符串中的 start/end 索引。与上面类似,您可以使用 x.span() 作为快捷方式来获取第一个匹配项的跨度。