繁体   English   中英

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,反正我也不是很懂,所以我想知道是否还有其他方法可以做到? 我认为最简单的方法通常是最好的。

假设您打算在更大的字符串中找到短语“西班牙的雨”:

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 (即匹配项)的输入字符串中的开始/结束索引。 与上面类似,您可以使用x.span()作为获取第一个匹配项的跨度的快捷方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM