python与正则表达式(part1)--元字符(python正则表达式元字符用法)

网友投稿 430 2022-08-31


python与正则表达式(part1)--元字符(python正则表达式元字符用法)

本系列BLOG为鄙人学习python时的学习笔记。

文章目录

​​元字符使用​​

​​普通字符​​​​或关系ß(从此知识点开始就是特殊字符了)​​​​匹配单个字符​​​​匹配字符集​​​​匹配字符集反集​​​​匹配字符串开始位置​​​​匹配字符串的结束位置​​​​匹配字符重复​​

​​*​​​​+​​​​?​​​​{n}​​​​{m,n}​​

​​匹配任意(非)数字字符​​​​匹配任意(非)普通字符​​​​匹配任意(非)空字符​​​​匹配开头结尾位置​​​​匹配(非)单词的边界位置​​

元字符使用

备注:个别编程语言对元字符的支持略有不同,比如某些元字符在个别编程语言中可能不支持。

普通字符

匹配规则:每个普通字符匹配其对应的字符

例子1

In : re.findall('ab',"abcdefabcd")Out: ['ab', 'ab']

注意!正则表达式在python中也可以匹配中文

例子2(支持UTF-8编码格式的匹配)

In :re.findall('小黄', "小黄和大白")Out: ['小黄']

或关系ß(从此知识点开始就是特殊字符了)

元字符: |匹配规则: 匹配 | 两侧任意的正则表达式即可

例子1

In : re.findall('com|cn',"baidu.com/tmooc.cn")Out: ['com', 'cn']

匹配单个字符

元字符: .

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

例子1

In : re.findall('小.兔',"小黄兔,大白兔,小兔")Out: ['小黄兔']

匹配字符集

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

表达形式:

[abc#!好] #表示 [] 中的任意一个字符[0-9],[a-z],[A-Z] #表示区间(0-9或a-z或A-Z)内的任意一个字符[_#?0-9a-z] #混合书写,一般区间表达写在单个字符后面

例子1

In : re.findall('[aeiou]',"How are you!")Out: ['o', 'a', 'e', 'o', 'u']

例子2

re.findall('[-0-9]', "hello A-007")['-', '0', '0', '7']

匹配字符集反集

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

例子1

In : re.findall('[^0-9]',"Use 007 port")Out: ['U', 's', 'e', ' ', ' ', 'p', 'o', 'r', 't']

例子2

re.findall('[^-a-z ]', "hello A-007")['A', '0', '0', '7']

匹配字符串开始位置

元字符: ^备注:这里的元字符和匹配字符集反集的元字符,虽然符号相同,但在正则表达式中的位置(该元字符必然放在最开头)和所表达的含义都不同.

匹配规则:匹配目标字符串的开头位置

例子1

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

匹配字符串的结束位置

元字符: $匹配规则: 匹配目标字符串的结尾位置规则技巧: ^ 和 $必然出现在正则表达式的开头和结尾处。如果两者同时出现,则中间的部分必须匹配整个目标字符串的全部内容。

例子1

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

例子2

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

匹配字符重复

*

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

例子1

In : re.findall('wo*',"wooooo~~w!")Out: ['wooooo', 'w']

例子2

In : print(re.findall('[A-Z][a-z]*', "Hello World, Hi Huang"))Out: ['Hello', 'World', 'Hi', 'Huang']

+

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

例子1

In : re.findall('[A-Z][a-z]+',"Hello World")Out: ['Hello', 'World']

例子2

In :print(re.findall('[A-Z][a-z]*', "Hello World, A B C"))Out: ['Hello', 'World', 'A', 'B', 'C']In : print(re.findall('[A-Z][a-z]+', "Hello World, A B C"))Out: ['Hello', 'World']

?

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

例子1(匹配整数)

In [28]: re.findall('-?[0-9]+',"Jame,age:18, -26")Out[28]: ['18', '-26']

{n}

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

例子1(匹配手机号码)

In : re.findall('1[0-9]{10}',"Jame:13886495728")Out: ['13886495728']

{m,n}

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

例子1(匹配QQ号)

In : re.findall('[1-9][0-9]{5,10}',"Baron:1259296994") Out: ['1259296994']

匹配任意(非)数字字符

元字符: \d \D匹配规则:\d 匹配任意数字(整数、小数、正数、负数)字符,\D 匹配任意非数字字符

例子1(匹配端口)

In : re.findall(\d{1,5}',"Mysql: 3306, ['3306', '80']

例子2

In :data = '''雨量是用雨量器和雨量杯来计算的,雨量器是个圆柱形的开口筒,筒口面积在我国多为314平方厘米(直径20厘米)。为了防止降水蒸发,中上部呈一漏洞型,下部放一储水瓶。为观测方便与上述口径配套有一特制量杯,雨量杯的口径为4厘米,因此每一毫米降水量在雨量杯上的长度为25毫米。为了连续记录液态降水量,水文气象部门多使用虹吸式雨量计或翻斗式遥测雨量计。它们的记录纸,不但记录了总降水量,还可以判定不同时段的降水量或降水强度。以在平面收集到的雨水深度表示,准确程度至0.25毫米或0.01寸。有时亦会以升每平方米 (1 L m-2 = 1 mm)表示。在气象统计名词上,雨量又可称为降雨量,即一定时间内之降水累积量,其中,若降水量若小於0.1公厘视为雨迹。'''In : print(re.findall('-?\d+\.?\d*', data))Out: ['314', '20', '4', '25', '0.25', '0.01', '1', '-2', '1', '0.1']

匹配任意(非)普通字符

元字符: \w \W匹配规则: \w 匹配普通字符,\W 匹配非普通字符说明: 普通字符指数字、字母、下划线、汉字。

例子1

In : re.findall('\w+',"server_port = 8888")Out: ['server_port', '8888']

例子2

In :re.findall('\W+',"server_port = 8888")Out: [' = ']

匹配任意(非)空字符

元字符: \s \S匹配规则: \s 匹配空字符,\S 匹配非空字符说明:空字符指空格、\r 、\n 、\t 、\v 、\f 字符

例子1

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

例子2

In :print(re.findall('\S+', "TUTU-12~#: fhgj"))Out: ['TUTU-12~#:', 'fhgj']

匹配开头结尾位置

元字符: \A \Z匹配规则: \A 表示开头位置(^),\Z 表示结尾位置($)

匹配(非)单词的边界位置

元字符: \b \B匹配规则: \b 表示单词边界,\B 表示非单词边界说明:单词边界指数字、字母(汉字)、下划线[这些其实就是\w]与其他字符的交界位置。

例子1

In : print(re.findall('is', "This is XiaoHuang"))Out: ['is', 'is']In : print(re.findall(r'\bis\b', "This is XiaoHuang"))#这里的python字符串'\bis\b'前要加rOut: ['is'] #这里输出的is,是第二个is(两边都有空格的is)

备注:为啥这里的python字符串前要加r,我们之后(下一个blog)再解释

例子2

In : print(re.findall(r'\Bis\b', "This is XiaoHuang"))Out: ['is'] #这里输出的is,是第一个is(只有右边都有空格的is)

例子3(匹配大写字母开头的单词)

In :print(re.findall(r'\b[A-Z]\w+', "This is iPython"))Out: ['This']


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java深入了解数据结构之优先级队列(堆)
下一篇:python与正则表达式(part2)--正则表达式的转义(正则表达式 python)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~