网站建设定制开发Python基础知识进阶之正则表达式

一.match

       re.match 网站建设定制开发是从字符串的起始位置网站建设定制开发匹配一个模式,

       匹配成功 re.match 网站建设定制开发方法返回一个匹配的对象,否则返回 None。

re.match(pattern, string, flags=0)

pattern: 网站建设定制开发匹配的正则表达式。

string:   网站建设定制开发要匹配的字符串。

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

       网站建设定制开发正则表达式可以包含一网站建设定制开发些可选标志修饰符来控网站建设定制开发制匹配的模式。网站建设定制开发修饰符被指定为一个可选的标志。网站建设定制开发多个标志可以通过按位或 ( | ) 来指定,例如:re.L | re.M 。

修饰符

描述

re.I

使匹配对大小写不敏感

re.L

做本地化识别(locale-aware)匹配

re.M

多行匹配,影响 ^ 和 $

re.S

使 . 匹配包括换行在内的所有字符

re.U

根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.

re.X

为了增加可读性,忽略空格和' # '后面的注释

  1. import re
  2. print(re.match('www', 'www.baidu.com'))
  3. # 在起始位置匹配 返回 <re.Match object; span=(0, 3), match='www'>
  4. print(re.match('com', 'www.baidu.com'))
  5. # 不在起始位置匹配 返回 None
  6. print(re.match('www', 'www.baidu.com').span())
  7. # 匹配成功字符起始位置 返回 (0, 3)
  8. print(re.match('www', 'www.baidu.com').group())
  9. # 获取匹配成功字符串 返回 www

二.search

       re.search 是扫描整个字符串并返回第一个成功的匹配,

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

re.search(pattern, string, flags=0)

pattern: 匹配的正则表达式。

string:   要匹配的字符串。

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

  1. import re
  2. print(re.search('www', 'www.baidu.com'))
  3. # 在起始位置匹配 返回 <re.Match object; span=(0, 3), match='www'>
  4. print(re.search('com', 'www.baidu.com'))
  5. # 不在起始位置匹配 返回 <re.Match object; span=(0, 3), match='www'>
  6. print(re.search('www', 'www.baidu.com').span())
  7. # 匹配成功字符起始位置 返回 (0, 3)
  8. print(re.search('com', 'www.baidu.com').group())
  9. # 获取匹配成功字符串 返回 com

注意:

       re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,函数返回None;而re.search匹配整个字符串,直到找到一个匹配。


三.sub

       re.sub用于替换字符串中的匹配项,结果返回替换后的字符串。

re.sub(pattern, repl, string, count=0, flags=0)

pattern :   正则中的模式字符串。

repl :        替换的字符串,也可为一个函数。

string :     要被查找替换的原始字符串。

count :     模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

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

  1. import re
  2. print(re.sub('w', 'www', 'w.baidu.com'))
  3. # 匹配成功替换字符串(默认替换1次) 返回 www.baidu.com
  4. print(re.sub('w', 'WWW', 'w.baidu.www', 2))
  5. # 匹配成功替换指定次数字符串 返回 WWW.baidu.WWWww

 四.subn

       re.subn和sub相同,都是用于替换字符串中的匹配项,只不过subn的结果返回一个元组包含替换后的字符串和替换次数。 

re.subn(pattern, repl, string, count=0, flags=0)

pattern :   正则中的模式字符串。

repl :        替换的字符串,也可为一个函数。

string :     要被查找替换的原始字符串。

count :     模式匹配后替换的最大次数,默认 0 表示替换所有的匹配。

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

  1. import re
  2. print(re.subn('w', 'www', 'w.baidu.com'))
  3. # 匹配成功替换字符串(默认替换1次) 返回 (www.baidu.com,1)
  4. print(re.subn('w', 'WWW', 'w.baidu.www', 2))
  5. # 匹配成功替换指定次数字符串 返回 (WWW.baidu.WWWww,2)

五.compile

       compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,

       供 match() 和 search() 这两个函数使用。

re.compile(pattern[, flags])

pattern : 一个字符串形式的正则表达式

flags : 可选,表示匹配模式,比如忽略大小写,多行模式等。

  1. import re
  2. x = re.compile('www')
  3. print(re.match(x,'www.baidu.com'))
  4. # <re.Match object; span=(0, 3), match='www'>
  5. y = re.compile('com')
  6. print(re.search(y,'www.baidu.com'))
  7. # <re.Match object; span=(10, 13), match='com'>

六.findall

       在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果有多个匹配模式,

       则返回元组列表,如果没有找到匹配的,则返回空列表。

findall(string[, pos[, endpos]])

string : 待匹配的字符串。

pos : 可选参数,指定字符串的起始位置,默认为 0。

endpos : 可选参数,指定字符串的结束位置,默认为字符串的长度。

  1. import re
  2. x = re.compile('www')
  3. print(re.findall(x,'www.baidu.www'))
  4. # ['www', 'www']
  5. x = re.compile('yyy')
  6. print(re.findall(x,'www.baidu.www'))
  7. # []

注意: 

       match 和 search 是匹配一次 findall 匹配所有。


七.finditer

       在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

re.finditer(pattern, string, flags=0)

pattern:匹配的正则表达式

string:  要匹配的字符串。

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

  1. import re
  2. x = re.compile('www')
  3. y = re.finditer(x,'www.baidu.www')
  4. for i in y:
  5. print(i,i.group())
  6. # <re.Match object; span=(0, 3), match='www'> www
  7. # <re.Match object; span=(10, 13), match='www'> www

八.split

       split 方法按照能够匹配的子串将字符串分割后返回列表。

re.split(pattern, string[, maxsplit=0, flags=0])

pattern:   匹配的正则表达式

string:     要匹配的字符串。

maxsplit:分隔次数,maxsplit=1 分隔一次,默认为 0,不限制次数。

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

  1. x = re.compile(r'\.|:')
  2. print(re.split(x, 'www.baidu:com'))
  3. # ['www', 'baidu', 'com']

九.表达式模式

模式

描述

^

匹配字符串开头 。

$

匹配字符串结尾 。

.

匹配除 ''之外的任何单个字符。要匹配 '' 请使用象 '[.]' 的模式 。

+

匹配前一个字符出现1次或者无限次,即至少有1次 。

*

匹配前一个字符出现0次或者无限次,即可有可无 。

?

匹配前一个字符出现1次或者0次,即要么有1次,要么没有 。

|

匹配左右任意一个表达式 。

[ ]

匹配[ ]中列举的字符 。

( )

将括号中字符作为一个分组进行匹配 。

{ }

匹配前一个字符出现的次数。

\A

用于匹配字符的开头,等同于 ^ 。

\b

匹配单词结尾,包括各种空白字符或者字符串结尾 。

\B

匹配非边界字符。

\d

匹配一个数字字符。等价于 [0-9] 。

\D

匹配一个非数字字符。等价于 [^0-9] 。

\s

匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\ \t\v] 。

\S

匹配任何非空白字符。等价于 [^ \f\ \t\v] 。

\w

匹配包括下划线的任何单词字符。等价于'[A-Za-z0-9_]' 。

\W

匹配任何非单词字符。等价于 '[^A-Za-z0-9_]' 。

\Z

用于匹配字符的结尾,等同于 $ 。


十.表达式应用

1.字符 '^' 匹配以指定字符串开头,并返回匹配成功字符串 。   

  1. import re
  2. x = re.compile(r'^w')
  3. for i in ['www', 'ywy']:
  4. print(re.search(x, i))
  5. # <re.Match object; span=(0, 1), match='w'>
  6. # None

2.字符 '$' 匹配以指定字符串的结尾,并返回匹配成功字符串 。

  1. import re
  2. x = re.compile(r'w$')
  3. for i in ['www', 'ywy']:
  4. print(re.search(x, i))
  5. # <re.Match object; span=(2, 3), match='w'>
  6. # None

 3.字符 '.' 代表任何一个字符,但是没有特别声明时不代表字符'' 。

  1. import re
  2. x = re.compile(r'1.3')
  3. for i in ['12333', '1\t333', '1Û']:
  4. print(re.search(x, i))
  5. # <re.Match object; span=(0, 3), match='123'>
  6. # <re.Match object; span=(0, 3), match='1\t3'>
  7. # None

 4.字符 '+' 重复前面一个匹配字符一次或者多次 。

  1. import re
  2. x = re.compile(r'\d+')
  3. for i in ['123', '45x']:
  4. print(re.search(x, i))
  5. # <re.Match object; span=(0, 3), match='123'>
  6. # <re.Match object; span=(0, 2), match='45'>

5.字符 '*' 重复前面一个匹配字符零次或者多次 。

  1. import re
  2. x = re.compile(r'12*')
  3. for i in ['11222', '12255']:
  4. print(re.search(x, i))
  5. # <re.Match object; span=(0, 1), match='1'>
  6. # <re.Match object; span=(0, 3), match='122'>
  7. x = re.compile(r'12+')
  8. for i in ['11222', '12255']:
  9. print(re.search(x, i))
  10. # <re.Match object; span=(1, 5), match='1222'>
  11. # <re.Match object; span=(0, 3), match='122'>

 注意:

       r'12+'匹配是'12',而r'12*'匹配的是'1',因为'2'可以重复零次,但'12+'却要求'2'重复一次以上。


6. 字符 '?' 重复前面一个匹配字符零次或者一次 。

  1. import re
  2. x = re.compile(r'12?')
  3. for i in ['12122', '31529']:
  4. print(re.search(x, i))
  5. # <re.Match object; span=(0, 2), match='12'>
  6. # <re.Match object; span=(1, 2), match='1'>

7.字符 '|' 代表或,即把左右分成两个部分,匹配左右任意⼀个表达式 。

  1. import re
  2. x = re.compile(r'12|21')
  3. for i in ['12333', '21333']:
  4. print(re.search(x, i))
  5. # <re.Match object; span=(0, 2), match='12'>
  6. # <re.Match object; span=(0, 2), match='21'>

8. 字符 '[ ]' 中的字符是任选择一个,如果字符ASCll码中连续的一组,那么可以使用 '-' 字符连接,例如[0-9]表示0-9的其中一个数字,[A-Z]表示A-Z的其中一个大写字符,[0-9A-z]表示0-9的其中一个数字或者A-z的其中一个大写字符。

  1. import re
  2. x = re.compile(r'[0-9]')
  3. for i in ['123', '45', '78']:
  4. print(re.search(x, i))
  5. # 匹配数字0-9之间的任意数字。
  6. # <re.Match object; span=(0, 1), match='1'>
  7. # <re.Match object; span=(0, 1), match='4'>
  8. x = re.compile(r'[A-Z]')
  9. for i in ['Abc', 'aBc']:
  10. print(re.search(x, i))
  11. # 匹配A-Z之间任意大写字母。
  12. # <re.Match object; span=(0, 1), match='A'>
  13. # <re.Match object; span=(1, 2), match='B'>
  14. x = re.compile(r'[A-z]')
  15. for i in ['Abc', 'abC']:
  16. print(re.search(x, i))
  17. # 匹配A-z之间任意大写或小写字母。
  18. # <re.Match object; span=(0, 1), match='A'>
  19. # <re.Match object; span=(0, 1), match='a'>

9. 使用括号( )可以把( )看出一个整体,经常与'+'、'*'、'?'连续使用,对( )部分进行重复匹配 。

  1. x = re.compile(r'(ab)+')
  2. for i in ['ababc', 'cababc']:
  3. print(re.search(x, i))
  4. # <re.Match object; span=(0, 4), match='abab'>
  5. # <re.Match object; span=(1, 5), match='abab'>
  6. x = re.compile(r'(ab)*')
  7. for i in ['ababc', 'abcabc']:
  8. print(re.search(x, i))
  9. # <re.Match object; span=(0, 4), match='abab'>
  10. # <re.Match object; span=(0, 2), match='ab'>
  11. x = re.compile(r'(ab)?')
  12. for i in ['ababc', 'abcabc']:
  13. print(re.search(x, i))
  14. # <re.Match object; span=(0, 2), match='ab'>
  15. # <re.Match object; span=(0, 2), match='ab'>

 10.字符 '{ }' 用于匹配前一个字符出现的次数 。

  1. import re
  2. for i in ['abc','abb','acb']:
  3. print(re.search(r'b{1}', i))
  4. # <re.Match object; span=(1, 2), match='b'>
  5. # <re.Match object; span=(1, 2), match='b'>
  6. # <re.Match object; span=(2, 3), match='b'>
  7. import re
  8. for i in ['abc','abb','acb']:
  9. print(re.search(r'b{2}', i))
  10. # None
  11. # <re.Match object; span=(1, 3), match='bb'>
  12. # None

11.特殊字符使用 '\' 引导,例如 '\r'、''、'\t' 等分别表示回车、换行、制表符号 。

  1. import re
  2. x = re.compile(r'|\t|\r')
  3. for i in ['12\r33','12', '12\t33']:
  4. print(re.search(x, i))
  5. # <re.Match object; span=(2, 3), match='\r'>
  6. # <re.Match object; span=(2, 3), match=''>
  7. # <re.Match object; span=(2, 3), match='\t'>

 12. '^' 出现在[]第首字符位置代表取反,例如 '[ ^x0-9]' 表示即不是x,也不是0-9数字的字符串 。

  1. import re
  2. x = re.compile(r'[^a0-9]')
  3. for i in ['abc', 'c16']:
  4. print(re.search(x, i))
  5. # <re.Match object; span=(1, 2), match='b'>
  6. # <re.Match object; span=(0, 1), match='c'>

13.字符 '\A' 用于匹配字符的开头,等同于 ^ 。

  1. import re
  2. x = re.compile(r'\A21')
  3. for i in ['212122', '122555']:
  4. print(re.search(x, i))
  5. # <re.Match object; span=(0, 2), match='21'>
  6. # None

14.字符 '\b' 表示单词结尾,单词结尾包括各种空白字符或者字符串结尾 。

  1. import re
  2. x = re.compile(r'b\b')
  3. for i in ['a b c', 'ab c', 'abb']:
  4. print(re.search(x, i))
  5. # <re.Match object; span=(2, 3), match='b'>
  6. # <re.Match object; span=(1, 2), match='b'>
  7. # <re.Match object; span=(2, 3), match='b'>

15.字符 ' \B '匹配非边界字符 。

  1. import re
  2. for i in ['abc','abb','acb']:
  3. print(re.search(r'b\B', i))
  4. # <re.Match object; span=(1, 2), match='b'>
  5. # <re.Match object; span=(1, 2), match='b'>
  6. # None

 16.字符 ' \d ' 匹配0~9之间的一个数值,并返回匹配成功的数字 。

  1. import re
  2. x = re.compile(r'\d')
  3. for i in ['123', 'x5y']:
  4. print(re.search(x, i))
  5. # <re.Match object; span=(0, 1), match='1'>
  6. # <re.Match object; span=(1, 2), match='5'>

17.字符 '\D' 匹配一个非数字字符。等价于 '[^0-9]' 。

  1. x = re.compile(r'\D+')
  2. for i in ['a12', 'b_56']:
  3. print(re.search(x, i))
  4. # <re.Match object; span=(0, 1), match='a'>
  5. # <re.Match object; span=(0, 2), match='b_'>

18.字符 '\s' 匹配任何空白字符,等价'[\r\ \f\v]' 。

  1. import re
  2. x = re.compile(r'\s+')
  3. for i in ['a\r\ b', 'c\f\vc']:
  4. print(re.search(x, i))
  5. # <re.Match object; span=(1, 4), match='\r\ '>
  6. # <re.Match object; span=(1, 3), match='\x0c\x0b'>

19.字符 '\S' 匹配任何非空白字符。等价于 '[^\f\ \t\v]' 。

  1. import re
  2. x = re.compile(r'\S+')
  3. for i in ['aB\r\ b', 'cD\f\vc']:
  4. print(re.search(x, i))
  5. # <re.Match object; span=(0, 2), match='aB'>
  6. # <re.Match object; span=(0, 2), match='cD'>

20.字符 '\w' 匹配包括下划线子内的单词字符,等价于'[a-zA-Z0-9_]' 。

  1. x = re.compile(r'\w+')
  2. for i in ['a123', 'b_456']:
  3. print(re.search(x, i))
  4. # <re.Match object; span=(0, 4), match='a123'>
  5. # <re.Match object; span=(0, 5), match='b_456'>

21.字符 '\W' 匹配任何非单词字符。等价于 '[^A-Za-z0-9_]' 。

  1. import re
  2. x = re.compile(r'\W+')
  3. for i in ['@#a123', '&*b_456']:
  4. print(re.search(x, i))
  5. # <re.Match object; span=(0, 2), match='@#'>
  6. # <re.Match object; span=(0, 2), match='&*'>

22.字符 '\Z' 用于匹配字符的结尾,等同于 $ 。

  1. import re
  2. x = re.compile(r'21\Z')
  3. for i in ['121221', '122555']:
  4. print(re.search(x, i))
  5. # <re.Match object; span=(4, 6), match='21'>
  6. # None

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发