2017-08-14 39 views
0

看來re.match和re.search w /'^'是一樣的,除了re.search 可以使用re.MULTILINE標誌使它更加靈活。'^'的re.match和re.search如何不同?

string ="""U.S. stock-index futures pointed 
to a solidly higher open on Monday 
North Korea. That issue overshadowed the state of 
the equity market, where earnings 
have been strong at a time of high 
employment and low inflation, 
as well as valuations that a 
ppear elevated by many metrics, north korea""" 

import re 


re.search('^North Korea\.?', string) # no match 
re.match('^North Korea\.?', string) # no match 
re.search('^North Korea\.?', string, flags = re.MULTILINE).group() #match 

使用一個比另一個有任何好處?只是剛剛開始

>>> re.match("c", "abcdef") # No match 
>>> re.search("c", "abcdef") # Match 
<_sre.SRE_Match object at ...> 

re.search()檢查匹配的字符串中的任何

+0

你爲什麼認爲他們做*或*應該*有區別? –

+0

查看[文檔]他們是非常不同的,因爲'match'只看字符串的開始,而'search'看起來貫穿整個字符串 –

+0

@Professor_Joykill我在談論使用re.search與' ^'標誌。 – Moondra

回答

0

re.match()檢查匹配。如果你想找到的子串,使用re.search()

>>> re.match("c", "abcdef") # No match 
>>> re.search("^c", "abcdef") # No match 
>>> re.search("^a", "abcdef") # Match 
<_sre.SRE_Match object at ...> 

兩種情況下,搜索和匹配做同樣的事情,因爲^

^(插入)匹配字符串的開始。因此,它強制重新搜索從字符串的開頭搜索(沒有MULTILINE)。

隨着^和多,re.search()re.match()是不同的,因爲:

re.match()只從字符串的開頭找到。所以,如果第一行不匹配,那麼它不匹配。

re.search()匹配字符串上的任何位置,因此它可以匹配第二,第三,...新行。

document,它說

不過請注意,在MULTILINE模式匹配()只在 開頭的字符串相匹配,而使用搜索()用「^」將定期 表達式開始匹配在每個 行的開頭。

+0

TL; DR:使用^與'search'匹配每行的開頭,但只匹配'匹配'中的第一行 –

+0

謝謝。我知道使用MULTILINE時使用脫字符號時兩者的區別,但我想知道在不使用MULTILINE標誌時兩者是否有區別。從我的測試中我找不到任何,但也許有經驗的用戶會知道。 – Moondra