正则表达式贪婪非贪婪是啥玩意等!

什么是正则表达式?
正则文本的高级匹配模式,提供搜索,替换等功能。本质是由一系列字符串和特殊符号构成的字符串,这个字符串就是正则表达式!
这是一个什么东西!他的输出结果是什么?

("-?\d+\.?\d*")

这是在ipython中显示的结果

re.findall("-?\d+\.?\d*","fss5f1d5s123s1f5123-5sf4-65sdf")
['5', '1', '5', '123', '1', '5123', '-5', '4', '-65']

这就是一个简单的正则表达式!
正则中元字符的使用
普通字符 匹配规则:每个普通字符匹配其对应的字符

re.findall("ab","abhhuhhkjifiabuih")
 ['ab', 'ab']

或关系“|” 匹配规则:“|”两侧任意的正则表达式

re.findall("ab|hk","abhhuhhkjifiabuih")
 ['ab', 'hk', 'ab']

匹配单个字符“.” 匹配规则:匹配除换行外的任意一个字符

re.findall("ab.","abhhuhhkjifiabuih")
 ['abh', 'abu']

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

re.findall("[dsdf]","abhhuhhkjifiabuih")
 ['f']

匹配字符集反集 “[^]” 匹配规则除了字符集外的任意一个字符

re.findall("[^abf]","abhhkji453fiabuih")
 ['h', 'h', 'k', 'j', 'i', '4', '5', '3', 'i', 'u', 'i', 'h']

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

re.findall("^a","a,bhhkji453fi,a,buih")
['a']

匹配字符串的结束位置“$” 匹配规则字符串的结尾位置

re.findall("a$","bhhkji453fi,buiha")
['a']

匹配字符重复“*” 匹配规则:匹配前面的字符出现0次或多次

re.findall("ab*","abhhkabbbbbb,buiha")
 ['ab', 'abbbbbb', 'a']

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

re.findall("ab+","abhhkabbbbbb,buiha")
['ab', 'abbbbbb']

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

re.findall("-?[^a-z]","abhhkabb-bbb-b,buiha")
['-', '-', ',']

元字符“{n}”匹配规则:匹配前面的字符出现n次
这里是一个电话号码的匹配规则

re.findall("1[0-9]{10}","461161651132165132161651321335")
['11616511321', '13216165132']

元字符“{m,n}” 匹配规则:匹配前边的字符出现m到n次
QQ号码的匹配规则第一位不为0

 re.findall("[1-9][0-9]{5,10}","461161651132165132161651321335")
 ['46116165113', '21651321616', '51321335']

匹配任意(非)数字字符
元字符“\d\D” 匹配规则:\d 匹配任意数字字符,\D 匹配任意非数字字符

re.findall("\d","4611as61sd6511")
['4', '6', '1', '1', '6', '1', '6', '5', '1', '1']

re.findall("\D","4611as61sd6511")
['a', 's', 's', 'd']

匹配任意(非)普通字符
元字符“\w \W” 匹配规则:\w匹配普通字符 \W匹配非普通字符

re.findall("\w","46as*61s-d6,511")
['4', '6', 'a', 's', '6', '1', 's', 'd', '6', '5', '1', '1']

re.findall("\W","46as*61s-d6,511")
 ['*', '-', ',']

匹配任意(非)空字符
空字符指 空格 \r \n \t \v \f 字符

re.findall("\s","46as* 61 s- d6,511")
 [' ', ' ', ' ']
re.findall("\S","4* 61 s- d6,5")
['4', '*', '6', '1', 's', '-', 'd', '6', ',', '5']

正则表达式的转义,如果使用正则表达式匹配特殊字符则需要加\表示转义在编程语言中,常使用原生字符串书写正则表达式避免多重转义,此时我们就需要用到“r”表示原生字符串。
贪婪和非贪婪模式
贪婪模式:默认情况下,匹配重复的元字符总是尽可能多的向后匹配内容

 re.findall(r"ab+","abbbbbjkhab")
 ['abbbbb', 'ab']

非贪婪模式:让匹配重复的元字符尽可能少的向后匹配内容。

re.findall(r"ab+?","abbbbbjkhab")
['ab', 'ab']

这就是贪婪模式和非贪婪模式,我们只要在我们匹配重复的元字符后边添加一个问号即可解决!
正则表达式分组
在正则表达式中,以()建立的正则表达式的内部分组,子组是正则表达式的一部分,可以作为内部整体的操作对象。
一个正则表达式中可以包含多个子组,但是不要重叠或者嵌套结构复杂
子组序列号一般从外到内,从左到右计数。

发布了14 篇原创文章 · 获赞 6 · 访问量 984

猜你喜欢

转载自blog.csdn.net/weixin_44935235/article/details/90302741