当前位置 : 主页 > 编程语言 > python >

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

来源:互联网 收集:自由互联 发布时间:2022-06-15
本系列BLOG为鄙人学习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',"www.baidu.com/www.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, http:80")
Out: ['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'前要加r
Out: ['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']

上一篇:python与正则表达式(part4)--正则表达式分组
下一篇:没有了
网友评论