首页 > 其他 > 详细

re.1-常用表达式规则

时间:2020-10-10 22:05:34      阅读:30      评论:0      收藏:0      [点我收藏+]

一、正则表达式的含义

  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(rab+?,"abbbbbbbbb")
Out[105]: [ab]

........待补充

re.1-常用表达式规则

原文:https://www.cnblogs.com/LQD-future/p/13685213.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!