标点符号的特殊含义 | 学习笔记

简介: 快速学习 标点符号的特殊含义

开发者学堂课程【Python 入门 2020年版:标点符号的特殊含义】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/639/detail/10447


标点符号的特殊含义


内容介绍:

一、非打印字符

二、特殊字符


一、非打印字符

非打印字符也可以是正则表达式的组成部分。

列出了表示非打印字符的转义序列:

\cx:匹配由 x 指明的控制字符。例如, lcM 匹配一个 Control-M 或回车符。

x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的'c'字符。

\f:匹配一个换页符。等价于\x0c\cL。

\n:匹配一个换行符。等价于\x0a \cJ。

\r:匹配一个回车符。等价于\x0d 和\cM。

\s:匹配任何空白字符,包括空格、制表符、换页符等等。等价于[\f\n\r\f\v]。注意 Unicode 正则表达式会匹配全角空格符。

\S:匹配任何非空白字符。等价于[\f\n\r\t\v]。

\t:匹配一个制表符。等价于\x09和\ cl。

\v:匹配一个垂直制表符。等价于\x0b 和\cK。

1. \s

\s 表示任意的空白字符,注意这是小写 s

import re

print(re.search(r'\s ', 'hello world '))#空格

print(re.search(r'\n', 'hello\nworld ' ))#换行

print(re.search(r'\t', "hello\tworld '))#制表符

输出结果为:

<re.Match object; span=(5,6), match=' '>

<re.Match object; span=(5,6), match= ' \n '>

<re.Match object; span=(5,6), match=' \t '>

匹配的都是空白字符。

2. \S

\S 表示非空白字符,注意这个是大写 S

print(re.search(r'\s' , '\t\n x'))

输出的结果为:

<re.Match object; span=(5,6), match='x '>

匹配的都是非空白字符,空格什么的都不会匹配。

其他的我们就不再说了。


二、特殊字符

所谓特殊字符,就是一些有特殊含义的字符。若要匹配这些特殊字符,必须首先使字符"转义",即,将反斜杠字符\放在它们前面。下表列出了正则表达式中的特殊字符:

():标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用\(和\ )。

. :匹配除换行符\ n 之外的任何单字符。要匹配.,请使用\ .。

[  :标记一个中括号表达式的开始。要匹配[,请使用\[。

\ : 将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如,'n'匹配字符'n'。'\n'匹配换行符,匹配\,而\(则匹配(。

{ :标记限定符表达式的开始。要匹配{,请使用\{。

| :指明两项之间的一个选择。要匹配|,请使用 V。

\d :匹配一个数字字符。等价于[0-9]。

[0-9] :匹配任何数字。等价于\d。

\D:匹配一个非数字字符。等价于一[^0-9]。

1. ()

用来表示一个分组。

m = re.search(r' h( \d+)x' , 'sh829xkflsa ' )

print(m.group(0))

输出的结果为:h829x

如果改为 m.group(1),运行结果就会变成:829。

如果我们就只想拿到后面小括号的内容:

m1 = re.search(r"(.*)',‘(1+1)*3+5')

print(m1.group())

输出的结果为:(1+1)*3+5拿到的是全部内容,如果想只拿(1+1)这个部分,应该改成 m1 = re.search(r"\(.*\)',‘(1+1)*3+5'),括号前面应该加一个反斜杠\。

此时的运行结果就是:(1+1)。

如果要表示括号一定要加反斜杠:

m = re.search(r" h( ld+)x', 'sh829xkflsa ' )

<re.Match object; span=(1,6),match='h829x '>

这个时候这个‘h’是拿不到的,要想拿到必须要加一个括号。

m = re.search(r" (h)(ld+)x', 'sh829xkf1sa ' )

m.group(1)

这个时候输出就是 h

2. .

表示匹配除了换行以外的任意字符。如果想要匹配.,那就需要使用\.。

3. []

用来表示可选项。[×-y]从 x 到 y 区间,包含 x 和 y。

m2 = re.search(r'f[0-5]m', 'pdsf6m ' )

print(m2)

此时输出的结果为:None。

这个表示的是 f 到 m 之前大小再0~5之间的数字,所以输出为空,假如把6改成3,就会输出:

<re.Match object; span=(3,6), match='f3m'>

注意这里面的0~5是包括开始和结束的,即包括0和5。

而且包括字字母也可以:

m2 = re.search(r'f[a-d]m', 'pdsfcm ' )

print(m2)

输出的结果为:

<re.Match object; span=(3,6), match='fcm'>

假如我们把 f 和 m 之间的数字变成4423,会发现输出为空,是因为只能匹配一次,如果想匹配需要加一个”+”,改为

m2 = re.search(r'f[0-5]+m', 'pdsf4423m ' )

print(m2)

此时输出的结果就是:

<re.Match object; span=(3,9), match='f4423m'>

m2 = re.search(r'f[0-5a-dx]+m', 'pdsfxm ' )

print(m2)

输出的结果为:

<re.Match object; span=(3,9), match='fxm'>

这里表示的是再 f 和 m 这个区间中可以匹配0到5或者 a 到 d 或者 x 都可以匹配成功,但是只能出现一次。

4. |

用来表示或者。和[]有一定的相似,但是有区别。[]表示的是区间,|表示的是可选值。

m2 = re.search(r'f(x|prz|t)m', 'pdsfprzm ' )

print(m2)

输出的结果为:

<re.Match object; span=(3,8), match='fprzm'>

其中可以出现 x 或者 prz 或者 t,出现其他的字母就会匹配不成功。

re.search(r'f(×|[prz]|t)m', 'pdsfzm' )

<re.Match object; span=(3,6), match='fzm ' >

这个证明[]之中只能出现单个字符,而|匹配的是 prz 这个字符串,[]只能匹配 prz 中其中的一个字符。

5. {}

用来限定大括号前面的元素出现的次数。

{n}:表示前面的元素出现 n 次

{n,}:表示前面的元素出现 n 次以上。

{,n}:表示前面的元素出现 n 次以下。

{m,n}:表示前面的元素初选 m 到 n 次

print(re.search(r'go{2}d', 'good' ))

输出的结果为:

re.Match object; span=(0,4), match='good' >

这里表示 o 出现2次。如果 good 变成 god 就会匹配不成功输出

None

print(re.search(r'go{2,}d', 'gooooood' ))

输出的结果为:

re.Match object; span=(0,8), match='gooooood' >

print(re.search(r'go{,2}d', 'gd' ))

输出的结果为:

re.Match object; span=(0,2), match='gd' >

print(re.search(r'go{3,5}d', 'gooood' ))

输出的结果为:

re.Match object; span=(0,6), match='gooood' >

6. *

表示前面的元素出现任意次数(0次及以上)等价于{0,}

print(re.search(r'go*d', 'gooooood' ))

输出的结果为:

re.Match object; span=(0,8), match='gooooood' >

如果中间o过多输出的时候会显示全。

7. +

表示前面的元素至少出现一次,等价于{1,}

print(re.search(r'go+d', 'goood' ))

输出的结果为:

re.Match object; span=(0,5), match='goood' >

8.

两种方法:

1. 规定前面的元素最多只能出现一次,等价于{,1}。

2. 将贪婪模式转换成为非贪婪模式。

print(re.search(r'go?d', 'god ' ))

输出的结果为:

re.Match object; span=(0,3), match='good' >

9. ^和&

^:以指定的内容开头

$:指定内容结尾

print(re.search(r'^a.*i$" , 'xmp\naofi\nddpppq ', re.M))

输出的结果为:

re.Match object; span=(4,8), match='aofi' >

以 a 开头以 i 结尾。

空格不会被检测到,只有换行才能够匹配成功。记得要加 re.M。

相关文章
|
6月前
|
C语言
【汇编语言实战】给定一个句子,将大写字母变为小写
【汇编语言实战】给定一个句子,将大写字母变为小写
63 1
|
6月前
|
数据处理
正则表达式详解:解析星号的含义
【4月更文挑战第3天】
806 1
正则表达式详解:解析星号的含义
|
Python
python字符串切分连接(输入一个包含多个单词的英文句子,单词间以空格分隔,标点符号后跟一个空格。定义一个函数,功能是用指定的符号把单词连接起来。)
python字符串切分连接(输入一个包含多个单词的英文句子,单词间以空格分隔,标点符号后跟一个空格。定义一个函数,功能是用指定的符号把单词连接起来。)
1061 0
|
机器学习/深度学习 JavaScript 前端开发
正则表达式符号含义
正则表达式符号含义
82 0
|
安全 Unix
RFC 2119 关键词中大写与小写的歧义
本文档是 Internet 工程任务组 (IETF) 的产品。它代表了 IETF 社区的共识。它已接受公众审查,并已被互联网工程指导小组 (IESG) 批准出版。有关 BCP 的更多信息,请参见 RFC 7841 的第 2 节。
100 0
RFC 2119 关键词中大写与小写的歧义
|
存储 算法
算法:编程在一个已知的字符串中查找最长单词,假定字符串中只包含字母和空格,空格用来分隔不同单词
算法:编程在一个已知的字符串中查找最长单词,假定字符串中只包含字母和空格,空格用来分隔不同单词
正则表达式去除空格、符号,只保留中文、英文、数字
正则表达式去除空格、符号,只保留中文、英文、数字
802 0
|
开发者 Python
特殊字母的含义 | 学习笔记
快速学习 特殊字母的含义
191 0
|
编译器 C语言
特殊符号的补充理解
正片开始👀 因为之前就写过关键字和操作符专题了,可能各位已经烂熟于心了,但某些细节方面我还是想拿出来讲一下,我们比较陌生的概念等等。
特殊符号的补充理解