• Home
  • About
    • Xrlin photo

      Xrlin

      A blog for sharing my thoughts and knowledge

    • Learn More
    • Github
  • Posts
    • All Posts
    • All Tags
  • Projects

Python中的正则表达式

03 Jun 2016

Reading time ~1 minute

python中的re模块提供了与Prel语言中正则表达式类似的方法,re模块提供了强大的字符串匹配功能,符合正则表达式标准,可以使用在其它编程语言中。

一、正则表达式语法

  • \ :反斜线在正则表达式中可以当作转义字符,如在正则匹配中想匹配(可以这样写\(,因为正则表达式中(是一个标准语法,()代表一个分组,如果想要匹配\可以写成\\\\或者r'\\'。
  • (...):(…)代表一个捕获分组,进行匹配后可以通过返回的match对象的group(index)方法获取指定分组匹配到的内容。
  • (?:..):非捕获分组,不捕获该分组,即在匹配后不存进group中。
  • (?aiLmsux):设定匹配时是否忽略大小写等,如i标识忽略大小写进行匹配。
  • (?P<name>...):给分组一个名称name,在匹配时可以通过`(?P=name)调用指定分组。
  • \number:获取序号为number的分组,如\1表示第一个捕获分组。
  • [...],匹配[…]中的任意一个字符。
  • *:匹配0个或一个以上,非贪婪匹配可以使用*?。
  • +:匹配一个以上
  • {m,n}, 匹配最少m个,最多n个字符。
  • A|B:匹配符合正则A或者正则B的内容。
  • (?#...):注释
  • (?=...):在下一段字符匹配...时才匹配成功,如Isaac (?!Asimov)只有在Isaac后又Asimov时才匹配成功。
  • (?<=...):匹配前缀被...匹配的字符。如:
 import re
 m = re.search('(?<=abc)def', 'abcdef')
m.group(0)
'def'

二、re模块常用匹配操作

  • re.compile:re.compile可以预编译一个匹配模式,方便重复使用该模式。 *re.match:匹配一个字符串的开头,在multiline模式中只匹配开头并不匹配每行开头,这也是它与re.search的区别。
  • re.search:依次查找整个字符串以进行匹配。
  • re.split(pattern, string, maxsplit=0, flags=0):根据给定pattern分割字符串,在python3.5中尝试只进行空匹配会触发ValueError异常。

re.split('\W+', 'Words, words, words.')
['Words', 'words', 'words', '']
re.split('(\W+)', 'Words, words, words.')
['Words', ', ', 'words', ', ', 'words', '.', '']
 re.split('\W+', 'Words, words, words.', 1)
['Words', 'words, words.']
 re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
['0', '3', '9']
  • re.sub(pattern, repl, string, count=0, flags=0):进行字符串替换,将string中匹配pattern的字符内容以repl的模式进行替换。


Python正则表达式 Like Tweet +1