我在Python中有一个正则表达式匹配对象。我想获得匹配的文本。说如果模式是'1.3'
,并且搜索字符串是'abc123xyz'
,我想要得到'123'
。我怎样才能做到这一点?Python:获取正则表达式匹配的文本
我知道我可以使用match.string[match.start():match.end()]
,但是我发现对于这样的基本查询来说非常麻烦(并且在某些情况下是浪费的)。
有没有更简单的方法?
我在Python中有一个正则表达式匹配对象。我想获得匹配的文本。说如果模式是'1.3'
,并且搜索字符串是'abc123xyz'
,我想要得到'123'
。我怎样才能做到这一点?Python:获取正则表达式匹配的文本
我知道我可以使用match.string[match.start():match.end()]
,但是我发现对于这样的基本查询来说非常麻烦(并且在某些情况下是浪费的)。
有没有更简单的方法?
你可以简单的使用匹配对象的group
功能,如:
match = re.search(r"1.3", "abc123xyz")
if match:
doSomethingWith(match.group(0))
获得整场比赛。 编辑:正如thg435指出的,你也可以省略0
,只需拨打match.group()
。附加说明:如果你的模式包含圆括号,你甚至可以通过传递1
,2
等到group()
来获得这些子匹配。
在我看来不直观......但我想这是Python提供的最好的。 – 2013-04-25 15:11:05
@RamRachum我不认为这太奇怪。当你进行正则表达式替换时,你可以用'\ 1','\ 2'等(或'$ 1','$ 2',取决于实现)来引用捕获组,并且整个匹配通常通过使用' \ 0'(或'$ 0')。所以这与团体编号一致。 – 2013-04-25 15:15:56
你可以忽略'0',只是'match.group()'。 – georg 2013-04-25 15:33:42
你需要把正则表达式中 “()”,以便能够得到的那部分
>>> var = 'abc123xyz'
>>> exp = re.compile(".*(1.3).*")
>>> exp.match(var)
<_sre.SRE_Match object at 0x691738>
>>> exp.match(var).groups()
('123',)
>>> exp.match(var).group(0)
'abc123xyz'
>>> exp.match(var).group(1)
'123'
否则它不会返回任何东西:
>>> var = 'abc123xyz'
>>> exp = re.compile("1.3")
>>> print exp.match(var)
None
我不认为使用'。*(...)。*'进行子串匹配是一种很好的做法。只需使用“搜索”而不是“匹配”,它可以为您完成所有工作。事实上,它甚至更胜一筹,因为你无法通过匹配获得多个匹配(相反,它将返回最后一个,这也是非常直观的,而不是第一个)。 – 2013-04-25 15:06:03
['re.finditer() '](http://docs.python.org/2/library/re.html) – Elazar 2013-04-25 14:48:03
@Elazar通过这个问题判断,OP知道如何获得'MatchObject's,但不知道如何轻松获取它们的内容。 – 2013-04-25 14:54:47