北京网帮你
学习python正则表达式17个知识点
时间:2019-11-04 23:47:33 浏览:118

python正则表达式17个知识点

动机
1. 文本处理已经成为计算机常见工作之一
2. 对文本内容的搜索,定位,提取是逻辑比较复杂的工作
3. 为了快速方便的解决上述问题,产生正则表达式技术

定义:即文本的高级匹配模式,提供搜索,替代,查找等功能。本质是由一系列特殊符号和字符组成的字串。

目标 :
1. 熟练掌握正则表达式符号
2. 能够看懂或者简单编写基本的正则表达式
3. 能够使用python操作正则表达式

特点:
* 方便进行检索修改文本的操作
* 支持编程语言众多
* 使用灵活多样

python ----> re模块  处理正则表达式

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


元字符  (正则表达式中有一定含义的符号)

1.  普通字符

元字符:   a   b   c   &   #
匹配规则 : 匹配字符本身

In [4]: re.findall("abc","abcdefghabc")
Out[4]: ['abc', 'abc']

In [6]: re.findall("你好","小平,你好")
Out[6]: ['你好']

2. 或

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

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

* | 左右不要有空格

3. 匹配单一字符

元字符:   .
匹配规则: 匹配除\n外任意一个字符

f.o---》foo  fao  f@o

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


4. 匹配开始位置

元字符 : ^
匹配规则: 匹配一个字符串的开头位置

In [6]: re.findall('^hello',"hello world")
Out[6]: ['hello']

5. 匹配结尾位置

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

In [15]: re.findall('py$',"hello.py")
Out[15]: ['py']

6. 匹配重复

元字符 : *
匹配规则: 匹配前面的正则表达式重复0次或者多次

fo*  ---》 f  fo  

In [20]: re.findall('ab*',"abbbbbscadsfab")
Out[20]: ['abbbbb', 'a', 'ab']

7.匹配重复

元字符 : +
匹配规则: 匹配前面的正则表达式1次或多次

ab+   ab  abbbbbbbbb  

In [23]: re.findall('ab+',"abbbbbscadsfab")
Out[23]: ['abbbbb', 'ab']

8. 匹配重复

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

ab? --> a  ab  

In [24]: re.findall('ab?',"abbbbbscadsfab")
Out[24]: ['ab', 'a', 'ab']

9. 匹配重复

元字符 : {n}
匹配规则 : 匹配前面的正则表达式n次

ab{3} --> abbb

In [25]: re.findall('ab{3}',"abbbbbadffg")
Out[25]: ['abbb']

10. 匹配重复

元字符 : {m,n}
匹配规则: 匹配前面的正则表达式m--n次

ab{3,5} --> abbb abbbb abbbbb

In [27]: re.findall('ab{3,5}',"abbbbbaabbbg")
Out[27]: ['abbbbb', 'abbb']

11. 匹配字符集合

元字符:  [字符集]
匹配规则: 匹配括号内任意一个字符

[abc123d]  a  b  c 1 2 3 d
[a-z] [A-Z] [0-9]
[123a-zA-Z]

In [29]: re.findall('[a-z]+',"hello 123")
Out[29]: ['hello']

12. 匹配字符集合

元字符:  [^ ...]
匹配规则: 除了字符集中的任意一个字符

[^abc] --> d e f....

In [31]: re.findall('[^abcdef]+',"a little boy")
Out[31]: [' littl', ' ', 'oy']

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

元字符:    \d    \D
匹配规则 : \d匹配任意数字字符   [0-9]
           \D 匹配任意非数字字符  [^0-9]

In [33]: re.findall('1\d{10}',"13711225566")
Out[33]: ['13711225566']

In [34]: re.findall('\D+',"The num is 1234")
Out[34]: ['The num is ']

14. 匹配(非)普通字符   (数字字母下划线)

元字符: \w     \W
匹配规则:\w 匹配任意一个普通字符   [_0-9a-zA-Z]
         \W 匹配任意一个非普通字符 [^_0-9a-zA-Z]

In [35]: re.findall('\w+',"Today is wednesday")
Out[35]: ['Today', 'is', 'wednesday']

In [36]: re.findall('\w+',"Today is 星期三")
Out[36]: ['Today', 'is', '星期三']

In [38]: re.findall('\W+',"@#$%^&*()")
Out[38]: ['@#$%^&*()']

15. 匹配(非)空字符    (空格,\r \t \n \0)

元字符: \s    \S  
匹配规则: \s 匹配任意空字符
          \S 匹配任意非空字符

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

In [42]: re.findall('\S+',"hello world")
Out[42]: ['hello', 'world']

16.  匹配起止位置

元字符: \A(^)    \Z($)
匹配规则: 匹配字符串的开始和结束位置

In [49]: re.findall('\Ahello world\Z',"hello world")
Out[49]: ['hello world']

绝对匹配 : 正则表达式前后加 ^$或\A\Z 表示正则表达式需要匹配目标字符串的全部内容

17. 匹配(非)单词边界
(普通字符和其他字符交接的位置为单词边界)

元字符: \b  \B
匹配规则 :  \b 单词边界
            \B 非单词边界

In [54]: re.findall(r'\bis\b',"This is Tom")
Out[54]: ['is']

In [55]: re.findall(r'\Bis',"This is Tom")
Out[55]: ['is']


元字符总结

匹配单个字符 :a  .  \d  \D  \w  \W  \s  \S
              [...] [^...]
匹配重复性: *  +  ?   {n}  {m,n}
匹配位置 : ^ $  \A  \Z  \b  \B
其他: |  ()  \


[上一篇]学习python正则表达式转义
[下一篇]使用Springboot加LayIM websocket
Copyright 2022 © 93580.com.cn 网帮你

2022 © 版权所有 红花岗区网帮你信息技术工作室

工信部备案号:黔ICP备2024036985号-2

请使用网帮你微信扫码登录