re.1常用表达式规则

python

一、正则表达式的含义

  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 匹配任意空字符 [

vf]
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 
匹配规则:

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

In [80]: re.findall("Ad+-d+","1000-15000")

Out[80]: ["1000-15000"]

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

17. 匹配(非)单词边界

元字符 :  B
匹配规则:

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

In [85]: re.findall(r"is","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   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"]

........待补充

以上是 re.1常用表达式规则 的全部内容, 来源链接: utcz.com/z/530430.html

回到顶部