Python入门进阶教程-原子

在正则表达式中,存在操作符和操作元,操作符存在优先级,操作元被称做原子
操作符优先级(由高到低)
(先不用在意操作符的名称,虽然也看不太懂)

1. 转义符号 (Escaping Symbol):
    2. 分组、捕获 (Grouping or Capturing):
    (...) (?:...) (?=...) (?!...) (?<=...) (?<!...)
3. 数量 (Quantifiers)
    a* a+ a? a{n, m}
4. 序列与定位(Sequence and Anchor)
    abc ^ $ \b \B
5. 或(Alternation)
    a|b|c
6. 原子 (Atoms)
    a [^abc] \t \r \n \d \D \s \S \w \W .

1. 本义字符

代表的就是它们的字面值,包括从 a 到 z,A 到 Z,0 到 9,还有 _
*注: 非本义字符:\ + . ? - ^ $ | ( ) [ ] { } < >,建议都直接加上转义符号 \ 来表示**

2 集合原子

标示集合原子,使用方括号 []。
即[abc] 的意思是说,“a or b or c”,即,abc 中的任意一个字符。
在方括号中,我们可以使用两个操作符:-(区间)和 ^(非)。

- [a-z] 表示从小写字母 a 到小写字母 z 中的任意一个字符。
- [^abc] 表示 abc 以外的其它任意字符,即,非 [abc]。

举:beg[iau]n 能够代表 begin、began,以及 begun。

注:一个集合原子中,^ 符号只能用一次,只能紧跟在 [ 之后。否则不起作用

3. 类别原子

能够代表 “一类字符” 的原子,它们都得使用转义符号再加上另外一个符号表达
\d 任意数字;等价于 [0-9]
\D 任意非数字;等价于 [^0-9]
\w 任意本义字符;等价于 [a-zA-Z0-9_]
\W 任意非本义字符;等价于 [^a-zA-Z0-9_]
\s 任意空白;相当于 [ \f\n\r\t\v](注意,方括号内第一个字符是空格符号)
\S 任意非空白;相当于 [^ \f\n\r\t\v](注意,紧随 ^ 之后的是一个空格符号)
.  除 \r \n 之外的任意字符;相当于 [^\r\n]

小技巧:d 是 digits;w 是 word characters;s 是 spaces

# 举例
import re

str = ‘<dl>(843) 542-4256</dl> <dl>(431) 270-9664</dl>‘
# 找到字符串中所有"数字-数字"格式的字符,其中第一个数字是三位数,第二个数字是四位数
pttn = r‘\d\d\d\-\d\d\d\d‘
print(re.findall(pttn, str))

# 输出
[‘542-4256‘, ‘270-9664‘]

4. 边界原子

用边界原子指定边界。也可以称作 “定位操作符”。

^ 匹配被搜索字符串的开始位置;
$ 匹配被搜索字符串的结束位置;
\b 匹配单词的边界;er\b,能匹配 coder 中的 er,却不能匹配 error 中的 er;
\B 匹配非单词边界;er\B,能匹配 error 中的 er,却不能匹配 coder 中的 er。

注:^ 和 $ 在 Python 语言中被 \A 和 \Z 替代。

# 举例
import re

str = ‘never ever verb however everest‘
pttn = r‘er\b‘
print(re.findall(pttn, str))
pttn = r‘er\B‘
print(re.findall(pttn, str))

# 输出
[‘er‘, ‘er‘, ‘er‘]
[‘er‘, ‘er‘]

5. 组合原子

用圆括号 () 将多个单字符原子组合成一个原子,() 内的字符串将被当作一整个原子

注意:
er 是两个原子,‘e‘ 和紧随其后的 ‘r‘
[er] 是一个原子,或者 ‘e‘ 或者 ‘r‘;
(er) 是一个原子,‘er‘

6. 数量操作符

数量操作符有:+ ? * {n, m}。用来限定位于它们之前的原子允许出现的个数,不加数量限定则代表出现一次且仅出现一次

+ 代表前面的原子必须至少出现一次,即: 出现次数 ≧ 1
? 代表前面的原子最多只可以出现一次,即:0 ≦ 出现次数 ≦ 1
* 代表前面的原子可以不出现,也可以出现一次或者多次,即: 出现次数 ≧ 0
{n} 代表之前的原子出现确定的 n 次;
{n,} 代表之前的原子出现至少 n 次;
{n, m} 代表之前的原子出现至少 n 次,至多 m 次

# 匹配字符串
str = [‘google‘, ‘gooogle‘, ‘goooogle‘, ‘goooooogle‘]

# 遍历字符串
for str_per in str:
    # o最少出现一次
    pttn = r‘go+gle‘
    print(re.findall(pttn, str_per))

    # o最多出现一次
    pttn = r‘go?gle‘
    print(re.findall(pttn, str_per))

    # o出现次数≧ 0
    pttn = r‘go?gle‘
    print(re.findall(pttn, str_per))

    # o出现至少2次,至多5次
    pttn = r‘go{2,5}gle‘
    print(re.findall(pttn, str_per))

    # 进阶:联立组合原子
    # g 或者 o 最少出现一次
    pttn = r‘[go]+gle‘

    # go 最少出现一次
    pttn = r‘(go)+gle‘
    print(re.findall(pttn, str_per))
  1. 或操作符 |

或操作符 | 是所有操作符中优先级最低的

import re

str = ‘begin began begun begins beginn‘
pttn = r‘begin|began|begun‘
print(re.findall(pttn, str))

# 输出
[‘begin‘, ‘began‘, ‘begun‘, ‘begin‘, ‘begin‘]

注:方括号的 | 不被当作特殊符号,而是被当作 | 这个符号本身。在方括号中的圆括号,也被当作圆括号 () 本身,而无分组含义。

关于更多python进阶知识,敬请期待!

原文地址:https://blog.51cto.com/14646124/2460540

时间: 2024-10-07 16:14:04

Python入门进阶教程-原子的相关文章

学python入门基础教程[推荐]

python入门经典必备推荐基础教程 绝对是python初学者入门必备,比learning python写的好100倍, 远超python基础教程n个数量级 下载地址 http://pan.baidu.com/s/1jGwzpeY 更多python学习资料 http://dou.bz/35ODPo

Python入门+进阶 第1章 Python入门导学(无论何时,只要开始就不晚)

1. Python入门导学 1.1 Python概念 Python(英国发音:/?pa?θ?n/ 美国发音:/?pa?θɑ?n/) 是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言. Python 的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构. Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节.类似于PHP和Perl语言. Python 是交互式语言: 这意味着,您可以在一个Python提示符

Python入门学习教程:数据库操作,连接MySql数据库

各位志同道合的同仁可以点击上方关注↑↑↑↑↑↑ 本教程致力于程序员快速掌握Python语言编程. 本文章内容是基于上次课程Python教程:Python教程:连接数据库,对数据进行增删改查操作 和python基础知识之上进行的.如想学习python基础请移步:Python开发实战系列教程-链接汇总,持续更新. 数据库增删改查操作. 我们打开Navicat 创建一个数据库Manager,并且创建一个数据表:Student 并添加初始化数据: 传统方式进行增删改查: 传统方式进行数据库的连接,可以使

python入门基础教程01 Python概述

01 Python概述 Python是一种面向对象的解释性的计算机程序设计语言,也是一种功能强大而完善的通用型语言,已经具有十多年的发展历史,成熟且稳定.Python 具有脚本语言中最丰富和强大的类库,足以支持绝大多数日常应用.1 这种语言具有非常简捷而清晰的语法特点,适合完成各种高层任务,几乎可以在所有的操作系统中运行. 目前,基于这种语言的相关技术正在飞速的发展,用户数量急剧扩大,相关的资源非常多. 现代计算机系统简介 这里我们首先简要了解一下现代计算机的体系结构.现代计算机通常是由计算机硬

python入门基础教程02 Python简介

02 Python简介 Python简介 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言,属于应用层软件.自从20 世纪90 年代初Python语言诞生至今,它逐渐被广泛应用于处理系统管理任务.自动化运维.图像处理游戏和Web 网站开发等领域.Python已经成为最受欢迎的程序设计语言之一.4.易读以及可扩展性,在国外用Python做科学计算的研究机构日益增多,一些知名大学已经采用Python教授程序设计课程.例如麻省理工学院的计算机科学及编程导论课程就使用Python语言讲

python入门基础教程03 Python开发环境基本使用

Hello Python 初识Python语言 Python(英语发音:/'pain/), 是一种面向对象.直译式计算机程序设计语言,由Guido van Rossum 于1989年底发明,第一个公开发行版发行于1991 年.Py- thon 语法简捷而清晰,具有丰富和强大的类库.它常被昵称为胶水语言,它能够很轻松的把用其他语言制作的各种模块(尤其是C/C++)轻松地联结在一起.Python语言的发明者Guido Van Rossum 在90 年代初发明了Python 语言,Python是目前运

python入门基础教程04 Python程序基本组成

Python程序基本组成 Python和其他高级语言一样,几乎都是首先从某些地方接收一些数据(如键盘或文件或者赋值),接着对数据进行必要的处理,之后把处理的结果传到某个地方去(输出到文件.数据库或者打印到屏幕上). Python程序基本架构如下: 程序初始化部分 程序数据的输入部分 程序数据的处理部分 程序数据的输出部分 程序结束部分 数据输出 在Python语言里可以通过print函数实现数据的输出操作,print 函数的语法结构如下所示. Python在执行print语句时,首先是计算一下p

python入门基础教程05 Python工具常见错误

Python-Shell反馈常见错误 初学者通常会使用Python-Shell来学习Python基础及语法知识,在使用Python-Shell 时会遇到这样或者那样的错误,有的是语法错误,有的是键入的函数或者变量名字拼写错误,现就初学者常出现的错误做一个总结. 变量.函数未定义 下面我们简单总结一下在使用Python-Shell时常见的错误提示. >>>len = 12>>>le Traceback (most recent call last):   File &qu

python 入门 简明教程

使用源文件 现在让我们重新开始编程.当你学习一种新的编程语言的时候,你编写运行的第一个程序通常都是“Hello World”程序,这已经成为一种传统了.在你运行“Hello World”程序的时候,它所做的事只是说声:“Hello World”.正如提出“Hello World”程序的Simon Cozens[1]所说:“它是编程之神的传统咒语,可以帮助你更好的学习语言.” 启动你选择的编辑器,输入下面这段程序,然后把它保存为helloworld.py. 例3.2 使用源文件 #!/usr/bi