我在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