Python学习 ——正则表达式

正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配。

re 模块使 Python 语言拥有全部的正则表达式功能。

compile 函数根据一个模式字符串和可选的标志参数生成一个正则表达式对象。该对象拥有一系列方法用于正则表达式匹配和替换。

re 模块也提供了与这些方法功能完全一致的函数,这些函数使用一个模式字符串做为它们的第一个参数

1.正则表达式修饰符 --可选标志

   正则表达式可以包含一些可选标志修饰符来控制匹配的模式

 修饰符被指定为一个可选的标志。多个标志可以通过按位OR(|)来指定。如re.I | re.M 被设置成I 和M 的标志

  

修饰符 描述
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解。

2.正则表达式模式

    下图列出了Python支持的正则表达式元字符和语法(图片来自http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html)

3.re模块

   1)re.match函数

  re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回none。

  函数语法: re.match(pattern, string, flags=0)

  pattern:匹配的正则表达式

  string:匹配的字符串

  flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

  匹配成功re.match方法返回一个匹配的对象,否则返回None。


start()                 返回匹配开始的位置                                                                                    
end() 返回匹配结束的位置
span() 返回一个元组包含匹配 (开始,结束) 的位置
group() 返回被 RE 匹配的字符串
group(num=0) 匹配的整个表达式的字符串,group() 可以一次输入多个组号,在这种情况下它将返回一个包含那些组所对应值的元组。
groups() 返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。


实例一:
 1 #!/usr/bin/env python
 2 # -*- coding: utf-8 -*-
 3 ‘‘‘
 4 # @time    : 2017/4/26 20:03
 5 # @author  : huange
 6 # @version : 1.1
 7 # @file    : test2.py
 8 # @Software: PyCharm
 9 ‘‘‘
10 import re
11 print(re.match(‘www‘,‘www.hh.com‘).span())     # 在起始位置匹配
12 print(re.match(‘com‘,‘www.hh.com‘))            # 不在起始位置匹配
13
14
15 结果:
16 (0,3)
17  None
实例二:
 1 #!/usr/bin/python3
 2 import re
 3
 4 line = "Cats are smarter than dogs"
 5
 6 obj = re.match( r‘(.*) are (.*?) .*‘, line, re.M|re.I)
 7
 8 if obj:
 9    print ("obj.group() : ", obj.group())
10    print ("obj.group(1) : ", obj.group(1))
11    print ("obj.group(2) : ", obj.group(2))
12    print(obj.start())
13    print(obj.end())
14    print(obj.groups())
15 else:
16    print ("No match!!")
17
18
19 结果:
20 obj.group() :  Cats are smarter than dogs
21 obj.group(1) :  Cats
22 obj.group(2) :  smarter
23 0
24 26
25 (‘Cats‘, ‘smarter‘)
2)re.search函数  re.search扫描整个字符串并返回第一个成功的匹配 函数语法: re.match(pattern,string, flags=0) pattern:匹配的正则表达式 string:匹配的字符串 flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

 匹配成功re.search方法返回一个匹配的对象,否则返回None。

实例一:
1 import re
2 print(re.search(‘www‘,‘www.hh.com‘).span())
3 print(re.search(‘com‘,‘www.hh.com‘).span())
4
5 结果:
6      (0,3)
7      (7,10)
实例二:
 1 #!/usr/bin/python3
 2 import re
 3
 4 line = "Cats are smarter than dogs"
 5
 6 obj = re.search( r‘(.*) are (.*?) .*‘, line, re.M|re.I)
 7
 8 if obj:
 9     print ("obj.group() : ", obj.group())
10     print ("obj.group(1) : ", obj.group(1))
11     print ("obj.group(2) : ", obj.group(2))
12     print(obj.start())
13     print(obj.end())
14     print(obj.groups())
15 else:
16     print ("No match!!")
17
18
19  结果:
20  obj.group() :  Cats are smarter than dogs
21  obj.group(1) :  Cats
22  obj.group(2) :  smarter
23  0
24  26
25 (‘Cats‘, ‘smarter‘)
PS:re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None; re.search匹配整个字符串,直到找到一个匹配。

3)re.sub函数  re.sub用于替换字符串中匹配到的选项  函数语法:re.sub(pattern, repl, string, count=0)  pattern : 正则中的模式字符串。   repl : 替换的字符串,也可为一个函数。  string : 要被查找替换的原始字符串。  count : 模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。实例一:
 1 #!/usr/bin/python3
 2 import re
 3 phone = ‘135-4238-5642  # 电话号码‘
 4
 5 # 删除注释
 6 num = re.sub(‘#.*$‘,‘‘,phone)
 7 print(num)
 8
 9 # 删除非字符
10 num = re.sub(‘\D‘,‘‘,phone)
11 print(num)
12
13 结果:
14     135-4238-5642
15     13542385642

实例二:

 1 #!/usr/bin/python
 2
 3 import re
 4
 5 # 将匹配的数字乘于 2
 6 def double(matched):
 7     value = int(matched.group(‘value‘))
 8     return str(value * 2)
 9
10 s = ‘A23G4HFD567‘
11 print(re.sub(‘(?P<value>\d+)‘, double, s))
12
13 结果为:
14      A46G8HFD1134

4)re.split函数

函数语法:re.split(pattern,string,maxsplit)
 按照能够匹配的子串将string分割后返回列表。maxsplit用于指定最大分割次数,不指定将全部分割。

1 import re
2
3 p = re.split(r‘\d+‘,‘one1two2three3four4‘)
4 print(p)

结果:    [‘one‘,‘two‘,‘three‘,‘four‘,‘‘]

5)re.findall函数
   以列表的形式返回能全部匹配到的子串

 函数语法:re.findall(pattern, string ,flags):

1 import re
2
3 p = re.findall(r‘\d+‘,‘one1two2three3four4‘)
4 print(p)
5
6 结果:
7         [‘1‘,‘2‘,‘3‘,‘4‘]



 
				
时间: 2024-10-16 18:04:33

Python学习 ——正则表达式的相关文章

[python 学习]正则表达式

re 模块函数re 模块函数和正则表达式对象的方法match(pattern,string,flags=0) 尝试使用带有可选的标记的正则表达式的模式来匹配字符串.如果匹配成功,就返回匹配对象:如果失败,就返回Nonesearch(pattern,string,flags=0) 使用可选标记搜索字符串中第一次出现的正则表达式模式.如果匹配成功,则返回匹配对象:如果失败,则返回Nonefindall(pattern,string [, flags] )① 查找字符串中所有(非重复)出现的正则表达式

Python学习——正则表达式

'[ ] ' 能够多个同时匹配 '.'     默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 '^'     匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r"^a","\nabc\neee",flags=re.MULTILINE) '$'     匹配字符结尾,或e.search("foo$","bfoo\nsdfsf",flags=re.MULTILINE

Python学习之路-装饰器&生成器&正则表达式

装饰器 通俗的讲,装饰器就是在不改变源代码基础上,给源代码增加新功能. 不改变函数的源代码.调用方式.返回值等,给函数增加新功能. 经典案例:登录装饰器, def login_decorator(func):     def inner():         if USER_TEMP["status"] == False:             print("\033[31;1m用户未登录,请先登录\033[0m")             login_atm()

Python学习笔记——正则表达式入门

# 本文对正则知识不做详细解释,仅作入门级的正则知识目录. 正则表达式的强大早有耳闻,大一时参加一次选拔考试,题目就是用做个HTML解析器,正则的优势表现得淋漓尽致.题外话不多讲,直接上干货: 1. 元字符: 与之对应的还有反义字符,大部分为小写字母变大写,例如\D表示匹配非数字的字符. 2. 重复(即匹配变长的字符串): 元字符可匹配单一的字符类型,若想匹配长度未知或长度限定的字符串需要在后边加上限定符. 3. 范围与分组: 有时元字符并不能满足匹配字符的需求,这时就需要[]来圈定匹配范围,例

python学习笔记八——正则表达式

1.元字符 []-常用来指定一个字符集:[abc];[a-z] -元字符在字符集中不起作用:[akm$] -补集匹配不在区间范围内的字符:[^5] ^-匹配行首 $-匹配行尾 \-后可加不同字符以表示不同意义,也可用于取消所有元字符 \d 匹配任何十进制数,相当于[0-9] \D 匹配任何非数字字符,相当于[^0-9] \s 匹配任何空白字符,相当于[\t\n\r\f\v] \S 匹配任何非空白字符 \w 匹配任何字母数字字符 \W 匹配任何非字母数字字符 *-匹配前一个字符零次或多次 +-至少

Python学习笔记——正则表达式

今天把之前学的正则表达式好好总结总结. 一.元字符 . :  .表示可以匹配任意一个字符 \d  :  \d表示可以匹配任意一个数字 \D  : \D表示可以匹配任意一个非数字 \s  :  \s表示可以匹配任意一个空白字母 \S : \S表示可以匹配任意一个非空白字母 \w : \w表示可以匹配任意一个字符 \W: \W表示可以匹配任意一个非字符 []  : []表示可以匹配括号中的任意的一个字符  例:[abc] , [a-z] , [^ab] ^  : ^表示只匹配字符串的开始部分    

学习 正则表达式 js java c# python 通用

正则表达式 js java c# python 学习网站 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/RegExp 概念 正则表达式是为了解决字符串操作中一些比较麻烦的场景,比如字符串提取.字符串替换.字符串验证等 常用于:表单验证:是否是一个数字.是一个电话号码.是一个邮箱... 字符串替换: 字符串查找 正则表达式其实也是js里面的一个对象 创建一个正则表达式 var reg

Python学习-37.Python中的正则表达式

作为一门现代语言,正则表达式是必不可缺的,在Python中,正则表达式位于re模块. 1 import re 这里不说正则表达式怎样去匹配,例如\d代表数字,^代表开头(也代表非,例如^a-z则不匹配任何小写字符),$代表结尾,这些百科或者其他书籍都有. 例子一,字符串中是否包含数字: 1 import re 2 userinput = input("please input test string:") 3 if re.match(r'\d',userinput): 4 print(

python re模块学习--正则表达式函数

这里主要介绍Python中常用的正则表达式处理函数.关于python中正则表达式的语法会再总结一篇博文. re.match re.match 尝试从字符串的开始匹配一个模式,如:下面的例子匹配第一个单词. 代码如下: #!/usr/bin/env python# -*- coding: utf-8 -*-import retext = "JGood is a handsome boy, he is cool, clever, and so on..."m = re.match(r&qu