1. 程式人生 > >python學習筆記(四)-----正則表示式

python學習筆記(四)-----正則表示式

import re
xxRegex=re.compile(xxxxxxxxxx)
result=xxRegex.search(onestring)
print(result.group())

1.用()分組,分組後可用result.group(int)區分

import re
s="123-1234dsf234-3456-4567dg111-11111"
c=re.compile(r'(\d\d\d)-(\d\d\d\d)')
result=c.search(s)
print(result.groups())
print(result.group(0))
print(result.group(1))
print(result.group(2))
'''
('123', '1234')
123-1234
123
1234
'''

2.用管道匹配多個分組

  • 字元‘|’稱為管道
  • regex=re.compile(r'a|b')
  • 此句中可匹配a或b
  • regex=re.compile(r'asd(aaa|bbb|ccc)')此句asdaaa,asdbbb,asdccc都可進行匹配

3.符號

  • ?匹配零次或一次前面的分組
  • *匹配零次或多次前面的分組
  • +匹配一次或多次前面的分組
  • {n}匹配n次前面的分組
  • {n,}匹配n次及以上前面的分組
  • {,n}匹配零次至n次前面的分組
  • {n,m}匹配n次至m次前面的分組
  • {n,m}?或*?或+?對前面的分組進行非貪心匹配
  • ^spam意味著字串必須以spam開始
  • spam$意味著字串必須以spam結束
  • .匹配除換行符外所有字元
  • \d,\w和\s分別匹配數字、單詞和空格
  • \D,\W和\S分別匹配數字、單詞和空格外的所有字元
  • [abc]匹配中括號內的任意字元
  • [^abc]匹配不在中括號內的任意字元
  • .*可以匹配所有字元
  • .*?非貪心匹配所有字元
  • re.I/re.IGNORECASE向search的第二引數傳入此值可忽略大小寫進行匹配 

4.findall()

search()只返回一個匹配,findall()返回全部匹配於一列表中。

5.sub()

sub中第一個引數為要替換字串,第二引數為原字串。使用後將匹配處替換為第一引數字串。

6.複雜化

向re.compile()中傳入re.VERBOSE可忽略正則表示式中的空格換行符。

regex=re.compile(r'''(
            (123)-
            (\d\d\d)-
            ([asdfg]*)
            )''',re.VERBOSE)

7.兩個或

regex=re.compile(xxx,re.IGNORECASE|re.DOTALL|re.VERBOSE)