美文网首页
Python正则表达式

Python正则表达式

作者: 037251a7c483 | 来源:发表于2017-04-08 21:46 被阅读26次

Python 中支持正则表达式表达式的方式是导入re模块。经常使用grep命令的话,会发现Python的正则和grep基本相同。不过Python中会有多个函数来支持不同的字符串搜索方式。

一、特殊字符以及特殊序列

1.1 常用特殊字符

    "."     匹配换行符以外的任何字符
    "^"     匹配字符串的开始
    "*"     匹配RE("*")前的0个或多个重复的字符
    "+"     匹配RE("+")前的一个或多个重复的字符
    "?"     匹配RE("?")前的0个或1个字符
    "*?,+?,??"      前面三种的非贪心版本
    "{m,n}"     匹配RE("{m,n}")前的 m 到 n个重复
    "\\"        转义字符
    "[]"    表示一组字符。如果"^"在"[]"开头,即[^...],则表示取该组以外的字符。如[^0-9]+表示不要数字
    "|"     A|B,表示匹配正则A或者正则B
    "()"    匹配括号中的正则表达式。即括号中的正则当成一个整体
    
    "(?P<name>RE)"      将正则表达式RE分组,并设置一个别名为name
    "(?P=name)"         通过之前设置的别名name来匹配字符串

1.2 常用特殊序列

\number    匹配相同编号的组的内容
\A    匹配字符串的开头
\Z    匹配字符串的结尾
\b    匹配空字符串,但仅在一个单词的开头或结尾处匹配
\B    匹配空字符串,但不匹配单词的开头或结尾。
\d    匹配十进制数字。相当于[0-9]
\D    匹配任何非数字字符。相当于[^0-9]
\s    匹配任何空白字符。相当于[ \t\n\r\f\v]
\S    匹配任何非空白字符。相当于[^ \t\n\r\f\v]
\w    匹配任何字母数字字符。相当于[a-zA-Z0-9_]
\W   匹配\w的补码
\\     匹配反斜杠

二、函数

2.1 match(pattern, string, flags=0)

功能: 将正则表达式patthern匹配到字符串string的开头。找到了则返回match对象,否则返回None。返回结果使用match.group()获得

  • 示例
# 匹配成功则执行if子句
>>> strings = '0.00 0.00 0.00 1/172 19841' 
>>> match = re.match('\d+', strings)
>>> if match:
...     print match.group()
... 
0

# 匹配失败不会执行if中的语句
>>> match = re.match('\A\D', strings) 
>>> if match:     
...     print match.group()
... 

注意,match()只能从匹配开始的部分,中间字符串是匹配不到的。看下面的例子

>>> string = '112.87.43.125 - - [31/Mar/2017:00:00:09 +0800] "GET /lua_mon/20170330_235511.c HTTP/1.1" 404 173 "-" "PycURL/7.19.7'
>>> re.match('(\d+:)+\d+', string).group()      
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'NoneType' object has no attribute 'group'

# 如果使用search()函数就可
>>> re.search('(\d+:)+\d+', string).group()
'2017:00:00:09'

2.2 search(pattern, string, flags=0)

功能: 通过扫描string,查找能够与pattern匹配的字符串。找到了则返回match对象,否则返回None

2.3 split(pattern, string, maxsplit=0)

功能:根据pattern来分割字符串,返回包含子字符串的列表

  • 示例
>>> strings = '0.00 0.00 0.00 1/172 19841' 
>>> re.split(" ", strings)
['0.00', '0.00', '0.00', '1/172', '19841']


2.x compile(pattern, flags=0)

功能:编译正则表达式模式,返回一个模式对象

  • 示例。取出一行Nginx日志的时间
>>> string = '112.87.43.125 - - [31/Mar/2017:00:00:09 +0800] "GET /lua_mon/20170330_235511.c HTTP/1.1" 404 173 "-" "PycURL/7.19.7'
>>> pattern = re.compile("([0-9]+:){3}\d+")
>>> pattern.search(string).group()           
'2017:00:00:09'

三、其他示例

  • (?P<name>) 和 (?P=name) 的使用
>>> strings = '0.00 0.00 0.00 1/172 19841'
>>> re.search('(?P<loads>[0-9]+.[0-9]+) (?P=loads) (?P=loads)', strings).group()
'0.00 0.00 0.00'

相关文章

  • 正则表达式

    Python正则表达式初识(一) Python正则表达式初识(二) Python正则表达式初识(三) Python...

  • 正则表达式

    Python:正则表达式Python:正则表达式

  • Python正则表达式指南

    Python正则表达式指南 本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达...

  • Python爬虫(十)_正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • python正则表达式

    本篇将介绍python正则表达式,更多内容请参考:【python正则表达式】 什么是正则表达式 正则表达式,又称规...

  • [转]python正则表达式(一) 函数使用

    原文:python | 史上最全的正则表达式 更全的正则表达式处理函数:在python中使用正则表达式(一) 0....

  • Python正则表达式

    python正则表达式

  • Python正则表达式用法详解

    搞懂Python 正则表达式用法 Python 正则表达式 正则表达式是一个特殊的字符序列,它能帮助你方便的检查一...

  • Python正则表达式指南

    本文介绍了Python对于正则表达式的支持,包括正则表达式基础以及Python正则表达式标准库的完整介绍及使用示例...

  • Python处理正则表达式超时的办法

    title: Python处理正则表达式超时的办法tags: [python3, 正则表达式超时, re模块]da...

网友评论

      本文标题:Python正则表达式

      本文链接:https://www.haomeiwen.com/subject/wngwottx.html