VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > python入门教程 >
  • re.1-常用表达式规则

一、正则表达式的含义

  1. 定义:即文本的高级匹配模式,提供搜索替换等功能.其本质是一系列由字符和特殊符号组成的字符串,这个字符串即正则表达式
  2. 匹配原理:由普通的字符和特殊符号构成,通过描述字符的重复,位置,种类等行为达到匹配某一类字符串的目的
  3. 正则特点:方便处理文本,支持语言众多,使用灵活多样

二、正则语法

  1. re.findall(pattern,string)
    • 功能: 使用正则表达式匹配字符串
    • 参数
      • pattern 正则表达式
      • string 目标字符串
    • 返回值 : 返回匹配内容列表

三、正则表达式模式

1. 普通字符

元字符 : a B c
匹配规则: 每个字符匹配对应的自身字符

In [15]: re.findall('ab','abcdaefabcdef')
Out[15]: ['ab', 'ab']

In [16]: re.findall('你好','你好,北京')
Out[16]: ['你好']

2. 或

元字符 : |
匹配规则: 匹配 | 两边任意一个正则表达式

In [24]: re.findall('ab|cd',"abcdef")
Out[24]: ['ab', 'cd']

3. 匹配单个字符

元字符 : .
匹配规则: 匹配除换行外任意一个字符

f.o --> foo fao

In [25]: re.findall('f.o',"foo fao")
Out[25]: ['foo', 'fao']

4. 匹配字符串开始位置

元字符 : ^
匹配规则: 匹配目标字符串的开始位置

In [29]: re.findall('^Jame',"Jame is a boy")
Out[29]: ['Jame']

5. 匹配字符串结束位置

元字符 : $
匹配规则: 匹配目标字符串的结束位置

In [32]: re.findall('Jame$',"Hi,Jame")
Out[32]: ['Jame']

6. 匹配重复

元字符 : *
匹配规则: 匹配前面的字符出现0次或多次

fo* --> fooooooooooo f

In [34]: re.findall('fo*',"fooooooabceffo")
Out[34]: ['foooooo', 'f', 'fo']

7. 匹配重复

元字符: +
匹配规则 : 匹配前面的字符出现1次或多次

fo+ --> fooooooooooo fo

In [37]: re.findall('fo+',"fooooooabceffo")
Out[37]: ['foooooo', 'fo']

8. 匹配重复

元字符 : ?
匹配规则 : 匹配前面的字符出现0次或1次

fo? --> f fo

In [43]: re.findall('fo?',"fooooooabceffo")
Out[43]: ['fo', 'f', 'fo']

9. 匹配重复

元字符 : {n}
匹配规则 : 匹配前面的字符重复指定的次数

fo{3} --> fooo

In [46]: re.findall('fo{3}',"fooooooabceffo")
Out[46]: ['fooo']

10. 匹配重复

元字符 : {m,n}
匹配规则 : 匹配前面的字符出现 m -- n次

fo{2,4} --> foo fooo foooo

In [49]: re.findall('fo{2,4}',"fooooooabceffoo")
Out[49]: ['foooo', 'foo']

11. 匹配字符集

元字符: [字符集]
匹配规则: 匹配字符集中任意一个字符

[abc123] --> a b c 1 2 3
[a-z] [A-Z] [0-9]
[$#_a-zA-Z]

In [50]: re.findall('[A-Z][a-z]*',"Hi,This is Lua")
Out[50]: ['Hi', 'This', 'Lua']

12. 匹配字符集

元字符 : [^...]
匹配规则 : 匹配除指定字符外的任意一个字符

[^abc] --> 除了a b c外任意一个字符
[^a-z]

In [61]: re.findall('[^ ]+',"This is a test")
Out[61]: ['This', 'is', 'a', 'test']

13. 匹配任意(非)数字字符

元字符 : \d \D
匹配规则:

\d 匹配任意一个数字字符 [0-9]
\D 匹配任意一个非数字字符 [^0-9]

In [63]: re.findall('\d+',"2018年就快过去,2019马上到来")
Out[63]: ['2018', '2019']

14. 匹配任意(非)普通字符

元字符 : \w \W
匹配规则:

\w 匹配普通字符 (数字字母下划线,utf8字符)
\W 匹配特殊字符

In [71]: re.findall('\w+',"PORT#1234,Error 44% 下降")
Out[71]: ['PORT', '1234', 'Error', '44', '下降']

15. 匹配任意(非)空字符

元字符 : \s \S
匹配规则:

\s 匹配任意空字符 [ \r\n\t\v\f]
\S 匹配任意非空字符

In [72]: re.findall('\w+\s+\w+',"hello world")
Out[72]: ['hello world']

In [74]: re.findall('^\S+',"Terna-123#H xxxxxxx")
Out[74]: ['Terna-123#H']

16. 匹配字符串开头结尾位置

元字符 : \A \Z
匹配规则:

\A 匹配字符串开头位置
\Z 匹配字符串结尾位置

In [80]: re.findall('\A\d+-\d+\Z',"1000-15000")
Out[80]: ['1000-15000']

绝对匹配(完全匹配) : 保证正则表达式匹配目标字符串的 全部内容

17. 匹配(非)单词边界

元字符 : \b \B
匹配规则:

\b 匹配单词边界 (普通字符和其他字符的交接)
\B 匹配非单词边界

In [85]: re.findall(r'\bis\b',"This is a boy")
Out[85]: ['is']

In [86]: re.findall(r'\Bis',"This is a boy")
Out[86]: ['is']

18.元字符总结

匹配单个字符: . [...] [^...] \d \D \w \W \s \S

匹配重复: * + ? {n} {m,n}

匹配位置: ^ $ \A \Z \b \B

其他: |  ()  \

19.正则表达式的转义

正则特殊符号: . * + ? ^ $ () [] | \

正则表达式如果匹配特殊字本身符则需要加\
e.g. 匹配字符 . 用 \.

目标字符串 正则表达式 字符串
$10 \$\d+ "\\$\\d+"

raw字串: 对字符串不进行转义解析

r'\$\d+' ==> '\\$\\d+'

20.贪婪和非贪婪

贪婪模式: 正则表达式的重复匹配默认总是尽可能多的向后 匹配内容

* + ? {m,n}

非贪婪(懒惰)模式 : 尽可能少的匹配内容

贪婪-->非贪婪 *? +? ?? {m,n}?

In [105]: re.findall(r'ab+?',"abbbbbbbbb")
Out[105]: ['ab']

........待补充

LQD-future

出处:https://www.cnblogs.com/LQD-future/p/13685213.html

相关教程