Python学习手册之字符类和元字符深入
2018-11-29 09:47:37来源:博客园 阅读 ()
在上一篇文章中,我们介绍了 Python 的正则表达式和元字符,现在我们介绍 Python 的字符类和对元字符进行深入讲解。
查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/10027947.html
字符类
字符类提供了一种只匹配特定字符集中的一个字符的方法。字符类通过方括号把一列字符或一个范围括在一起。
import re
string1 = "python"
string2 = "eggs"
string3 = "hello"
pattern = r"[mnopq]"
search1 = re.search(pattern,string1)
search2 = re.search(pattern,string2)
search3 = re.search(pattern,string3)
if search1:
print(search1.group())
print("search 1")
if search2:
print(search2.group())
print("search 2")
if search3:
print(search3.group())
print("search 3")
运行结果:
>>>
p
search 1
o
search 3
>>>
匹配模式 [mnopq] 在 search 函数中匹配字符串包含的其中任何一个字符。
字符类可以匹配字符范围:
[a-z] 匹配任何小写字母。
[M-Q] 匹配任何大写字母从 M 到 Q。
[0-9] 匹配数字。
可以在一个类中包含多个范围。例如,[A-Za-z] 匹配任何情况下的一个字符。
import re
string1 = "python5"
string2 = "Aggs1"
string3 = "hello"
pattern = r"[a-z][a-z][0-9]"
search1 = re.search(pattern,string1)
search2 = re.search(pattern,string2)
search3 = re.search(pattern,string3)
if search1:
print(search1.group())
print("search 1")
if search2:
print(search2.group())
print("search 2")
if search3:
print(search3.group())
print("search 3")
运行结果:
>>>
on5
search 1
gs1
search 2
>>>
上面示例中的正则模式匹配包含两个小写字母然后跟着一个数字的字符串。
在字符类的开头有 ^ 表示匹配非字符类,也就是它与包含的字符之外的任何字符匹配。
有些元字符 (如 $ 和 .) 在字符类中没有任何意义,元字符 ^ 同样没有任何意义,除非它是字符类中的第一个字符。
import re
string1 = "This is Python3.7"
string2 = "abc123"
string3 = "hello"
pattern = r"[^a-z]"
search1 = re.search(pattern,string1)
search2 = re.search(pattern,string2)
search3 = re.search(pattern,string3)
if search1:
print(search1.group())
print("search 1")
if search2:
print(search2.group())
print("search 2")
if search3:
print(search3.group())
print("search 3")
运行结果:
>>>
T
search 1
1
search 2
>>>
匹配模式 [^a-z] 用于排除小写字符串。注意,^ 应该位于括号内,表示非此字符类。
元字符深入
有些比较特殊的元字符是 *, +, ?, { 和 },它们用来指定重复的次数。
元字符 * 叫通配符,是匹配范围最广的模式之一,因为它可以匹配零个或多个任意字符 (除了换行符:
\r 和 \n),并且它总是尝试尽可能多的匹配,匹配可以是一个字符、一个类或括号中的一组字符。
import re
string1 = "python"
string2 = "abc123"
string3 = "pythonabc"
pattern = r"python(abc)*"
search1 = re.search(pattern,string1)
search2 = re.search(pattern,string2)
search3 = re.search(pattern,string3)
if search1:
print(search1.group())
print("search 1")
if search2:
print(search2.group())
print("search 2")
if search3:
print(search3.group())
print("search 3")
运行结果:
>>>
python
search 1
pythonabc
search 3
>>>
上面的示例匹配以 python 开头的字符串后面跟随零个或多个 abc 的字符串。
总是尝试匹配尽可能多的模式叫做贪心模式。
元字符 + 与 * 非常相似,只不过它的意思是一个或多个重复,而不是零或多个重复。
import re
string1 = "pyt"
string2 = "abc123"
string3 = "pythonabc"
pattern = r"pyt+"
search1 = re.search(pattern,string1)
search2 = re.search(pattern,string2)
search3 = re.search(pattern,string3)
if search1:
print(search1.group())
print("search 1")
if search2:
print(search2.group())
print("search 2")
if search3:
print(search3.group())
print("search 3")
运行结果:
>>>
pyt
search 1
pyt
search 3
>>>
* 匹配前面表达式的 0 次或很多次。
+ 匹配前面表达式的 1 次或很多次。
元字符问号 ? 匹配零或一个前面的重复。
import re
string1 = "pyt-hon"
string2 = "abc123"
string3 = "pythonabc"
pattern = r"pyt(-)?hon"
search1 = re.search(pattern,string1)
search2 = re.search(pattern,string2)
search3 = re.search(pattern,string3)
if search1:
print(search1.group())
print("search 1")
if search2:
print(search2.group())
print("search 2")
if search3:
print(search3.group())
print("search 3")
运行结果:
>>>
pyt-hon
search 1
python
search 3
>>>
花括号
花括号可以用来表示两个数字之间的重复次数。表达式 {x,y} 表示匹配出现次数介于 x 和 y 的前面的字符。因此 {0,1} 和 ? 意思相同。
如果不写第一个数字,它将默认为零。如果不写第二个数字,它被认为是可以匹配很多次。
import re
pattern = r"6{1,2}$"
string1 = "555"
string2 = "666"
string3 = "6"
search1 = re.search(pattern,string1)
search2 = re.search(pattern,string2)
search3 = re.search(pattern,string3)
if search1:
print(search1.group())
print("search 1")
if search2:
print(search2.group())
print("search 2")
if search3:
print(search3.group())
print("search 3")
运行结果:
>>>
66
search 2
6
search 3
>>>
6{1,2}$ 匹配字符串含有 1 次到 2 次的 6。
注意:在 Python 里指定的数字必须小于 4294967295 且第一个必须小于等于第二个。
“You can neither win nor lose if you don't run the race..”
“如果你都不敢站在跑道上,何谈输赢。” -- 大卫·鲍伊
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Python 获取对象信息
下一篇:Python (三) 基础语法
- python3基础之“术语表(2)” 2019-08-13
- python3 之 字符串编码小结(Unicode、utf-8、gbk、gb2312等 2019-08-13
- Python3安装impala 2019-08-13
- 小白如何入门 Python 爬虫? 2019-08-13
- python_字符串方法 2019-08-13
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash