1. 程式人生 > >Python開發應用-正則表達進行排序搜索

Python開發應用-正則表達進行排序搜索

ast 開頭 定位 inf 字符串結束 search 其中 字符 都是

re模塊提供了3個方法對輸入的字符串進行確切的查詢,match和search最多只會返回一個匹配條件的子串,可以理解為非貪婪模式,而findall會返回N個匹配條件的子串,可以理解為貪婪模式

re.match()

re.search()

re.findall()

#match()方法的工作方式是只有當被搜索字符串的開頭匹配模式的時候它才能查找到匹配對象,match返回的是對象,對象裏面包含了很多信息

match=re.match(r‘dog‘,‘dog cat dog‘) #只要匹配到滿足條件的就不匹配了
print match.group(0)  #dog
print match.start()    #0
print match.end()     #3
match=re.match(r‘cat‘,‘dog cat dog‘) 
print type(match) #<type ‘NoneType‘>  #因為cat沒有在字符串的開頭,所以沒有匹配到

  #search()方法和match()類似,不過search()方法不會限制我們只從字符串的開頭查找匹配,它匹配子串,直到匹配到為止或者字符串結束為止

match=re.search(r‘cat‘,‘dog cat dog‘)
print match.group(0)   #cat,如果不分組,默認就是第0組
print match.start()    #4
print match.end()     #7

  #findall返回的是列表

match=re.findall(r‘dog‘, ‘dog cat dog‘) #匹配是整個字符串,每個子串都要匹配,匹配到的字符串剔除,後面的字符串要繼續匹配正則條件,直到字符串的結尾,有多少匹配多少
print match #[‘dog‘, ‘dog‘]

  #使用 mathch.group 分組使用(),分組和不分組匹配的"大子串"都是一樣,但是分組之後,可以對這些子組做單獨處理。

contactInfo = ‘Doe, John: 555-1212‘
match=re.search(r‘\w+, \w+: \S+‘, contactInfo)
print match.group(0)    #Doe, John: 555-1212
match = re.search(r‘(\w+), (\w+): (\S+)‘, contactInfo)
print match.group(0)   #Doe, John: 555-1212,第0組表示匹配的"大子串",滿足全部條件
print match.group(1)    #Doe
print match.group(2)     #John
print match.group(3)     #555-1212

  #當一個正則表達式有很多分組的時候,通過組的出現次序來定位就會變的不現實。Python還允許你通過下面的語句來指定一個組名:

match = re.search(r‘(?P<last>\w+), (?P<first>\w+): (?P<phone>\S+)‘, contactInfo)
print match.group(‘last‘)  #Doe
print match.group(‘first‘) #John
print match.group(‘phone‘) #555-1212

  #盡管findall()方法不返回分組對象,它也可以使用分組。類似的,findall()方法將返回一個元組的集合,其中每個元組中的第N個元素對應了正則表達式中的第N個分組。

match=re.findall(r‘\w+, \w+: \S+‘, contactInfo)
print match    #[‘Doe, John: 555-1212‘]

  

match=re.findall(r‘(\w+), (\w+): (\S+)‘, contactInfo)
print match   #[(‘Doe‘, ‘John‘, ‘555-1212‘)]

  

Python開發應用-正則表達進行排序搜索