模式匹配和正则表达式的学习

python实现

正则表达式

其对文字处理有着超高的效率
利用正则表达式可以实现“三步解决一个问题”

步骤

  • 1.用 import re 导入正则表达式模块。
  • 2.用 re.compile()函数创建一个 Regex 对象(记得使用原始字符串)。
  • 3.向 Regex 对象的 search()方法传入想查找的字符串。它返回一个 Match 对象。
  • 4.调用 Match 对象的 group()方法,返回实际匹配文本的字符串。

正则表达式-regex

import re
# first step , write a expected module
phoneNumRegex=re.complie(r'\d\d\d-\d\d\d-\d\d\d\d')
# second step ,input the the string
mo=phoneNumRegex.search('my phone number is : 123-456-1123')
# third step ,output the group result
print('phone number found:'+mo.group())

其中 正则表达式的编写前 加一个r,是用来表示是原始字符串,不包括转义字符

use group separate the item

phoneNumRegex2=re.compile(r'(\d\d\d)-(\d\d\d-\d\d\d\d)')
mo2=phoneNumRegex2.search('my phone numer is:345-232-4556')
print('mo2.group(1):'+mo2.group(1))
print('mo2.group(2):'+mo2.group(2))
print("mo2.group(0):"+mo2.group(0))
print('mo2.group():'+mo2.group())
print(mo2.groups()) 

如果想匹配 ()括号在字符串中,使用'\(' ,'\)' 转义字符来实现

# explain ,if need () in regex  use '\(' # use | pipeline  match more than one string
heroRegex=re.compile(r'dengshuo|zhengchuan')
mo3=heroRegex.search('dengshuo orginal name is deng zhengchuan')
mo4=heroRegex.search('deng zhengchuan is dengshuo')
print(mo3.group())                                       # | just like or ,return the first match group
print(mo4.group())                                       # can use findall() match all group# use ? implement optinal match   ,? partment  0 or 1 times
batRgex=re.compile(r'Bat(wo)?man')
mo5=batRgex.search('dengshuo is a Batman')
mo6=batRgex.search('a woman can be a Batwoman')
print(mo5.group())
print(mo6.group())# use * 0, 1 or many times
# use + ,1 or many timesbatRgex=re.compile(r'Bat(wo)*man')       # can get Batman
batRgex=re.compile(r'Bat(wo)+man')       # can't  get Batman # use (wo){} match special number
batRgex=re.compile(r'Bat(wo){2}man')     # only match Batwowoman
batRgex=re.compile(r'Bat(wo){3,5}man')   # can match  Batwowowoman Batwowowowoman Batwowowowowoman

匹配多个相同字符时,默认是贪心的

greedyHaRegex = re.compile(r'(Ha){3,5}')        # 贪心策略
mo1 = greedyHaRegex.search('HaHaHaHaHa')
mo1.group()
## 'HaHaHaHaHa'
nongreedyHaRegex = re.compile(r'(Ha){3,5}?')   # 非贪心
mo2 = nongreedyHaRegex.search('HaHaHaHaHa')
mo2.group()
## 'HaHaHa'

findall()

  • 1.如果调用在一个没有分组的正则表达式上

    例如\d\d\d-\d\d\d-\d\d\d\d,方法 findall()将返回一个匹配字符串的列表,例如['415-555-9999', '212-555-0000']。

  • 2.如果调用在一个有分组的正则表达式上

    例如(\d\d\d)-(\d\d\d)-(\d\d\d\d),方 法 findall()将返回一个字符串的元组的列表(每个分组对应一个字符串),例如[('415', '555', '1122'), ('212', '555', '0000')]。

自定义字符分类

\d   数字
\D   非数字
\w   字母,数字,下划线
\W  非(字母,数字,下划线)
\s    空格,制表符,换行符
\S   ^()^  必须以什么字符串开始
$ 必须以什么字符串结束
.  通配符
* 重复字符
.* 可以用来匹配除去换行符外的所有字符

re.complie(r'[aeiouAEIOU]')

当然还有反向选择
re.complie(r'[^aeiouAEIOU]')

不区分大小写
complile的参数
re.complie(r' ',re.I) 或者 re.complie(r' ',re.IGNORECASE) 输入第二参数进行限定

快速检索

  • ?匹配零次或一次前面的分组。
  • *匹配零次或多次前面的分组。
  • +匹配一次或多次前面的分组。
  • {n}匹配 n 次前面的分组。
  • {n,}匹配 n 次或更多前面的分组。
  • {,m}匹配零次到 m 次前面的分组。
  • {n,m}匹配至少 n 次、至多 m 次前面的分组。
  • {n,m}?或*?或+?对前面的分组进行非贪心匹配。
  • ^spam 意味着字符串必须以 spam 开始。
  • spam$意味着字符串必须以 spam 结束。
  • .匹配所有字符,换行符除外。
  • \d、\w 和\s 分别匹配数字、单词和空格。
  • \D、\W 和\S 分别匹配出数字、单词和空格外的所有字符。
  • [abc]匹配方括号内的任意字符(诸如 a、b 或 c)。
  • [^abc]匹配不在方括号内的任意字符。

sub()方法替换字符串

找到目标字符出进行替换,输入两个参数 。第一个是要替换的参数,第二个是要被替换的参数

import re
namesRegex=re.compile(r'Agent \w+')              # 到空格结束
namesRegex.sub('CENSOND','Agent Alice gave the number in the sentence')
# CENSOND Agent Alice gave the number in the sentence

转载于:https://www.cnblogs.com/GeekDanny/p/10843652.html

模式匹配和正则表达式_python相关推荐

  1. python中正则表达式的默认匹配方式为_Python模式匹配与正则表达式

    1.1 不用正则表达式来匹配文本 假设我希望在一个字符串中找到电话号码,电话号码的格式为三个数字,一个短横线,四个数字,一个短横线,四个数字 比如:131-3310-5293和132-2670-986 ...

  2. python正则表达式提取电话号码_Python学习笔模式匹配与正则表达式之电话号码和Email地址提取程序...

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  3. python正则表达式匹配模式屠夫之桥_Python 编程快速上手 第 7章 模式匹配与正则表达式...

    1 >>> consonantRegex = re.compile(r'[^aeiouAEIOU]')2 >>> consonantRegex.findall('R ...

  4. python中的美元符号_Python学习笔模式匹配与正则表达式之插入字符和美元字符

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  5. python正则表达式提取电话号码区号_Python学习笔模式匹配与正则表达式之电话号码和Email地址提取程序...

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  6. 菜鸟教程python正则表达式_python 正则表达式详解

    python 正则表达式详解 1. 正则表达式模式 模式描述 ^ 匹配字符串的开头 $ 匹配字符串的末尾. . 匹配任意字符,除了换行符,当re.DOTALL标记被指定时,则可以匹配包括换行符的任意字 ...

  7. Scala基础教程(八):模式匹配、正则表达式

    匹配使用case 类: case classes是用于模式匹配与case 表达式指定类.这些都是标准类具有特殊修饰:case.下面是一个简单的模式使用case class匹配示例: object Te ...

  8. 菜鸟教程python正则表达式_Python正则表达式常用函数菜鸟教程

    这篇文章主要为大家详细介绍了Python正则表达式常用函数菜鸟教程,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! Py ...

  9. python程序开发正则表达式_python正则表达式的使用(实验代码)

    正则表达式是一个特殊的字符序列,它能帮助你方便的检查一个字符串是否与某种模式匹配. Python 自1.5版本起增加了re 模块,它提供 Perl 风格的正则表达式模式. re 模块使 Python ...

  10. c++正则表达式_Python正则表达式教程-常用文本处理技巧

    介绍: 正则表达式用于识别模式(pattern)是否存在于给定的字符(字符串)序列中.它们有助于处理文本数据,这通常是涉及文本挖掘的数据科学项目的先决条件.您一定遇到过一些正则表达式的应用程序:它们在 ...

最新文章

  1. 带来高收入的三大竞争力技巧,可以涨到40W了!
  2. IDEA和Eclipse工程结构的区别
  3. linux中setfacl命令,setfacl命令
  4. 江门农商银行引入阿里云AnalyticDB,实现数据自助分析平台升级
  5. python变量的输入
  6. 7-5 排列的字典序问题 (10 分)(思路加详解全排列问题+vector容器做法)Come Baby!
  7. 统计字符串中某字符出现次数
  8. flink-cdc(java案例)
  9. mysql概念模型中的3种基本联系_数据库建模三步骤:概念模型
  10. PHP require、include、require_once、include_once用法及区别
  11. 陀螺年度巨献 | 2020年度区块链产业发展报告
  12. 幻八角2~6階的首三名拓荒者:彭保旺鐘明黃劍潮
  13. 画布Canvas在线生成支付宝收款码
  14. Github每日精选(第79期):虚拟数据生成库faker
  15. 证明:高斯白噪声的正交变换仍然是高斯白噪声
  16. 代码写春联【百度AI智能春联Golang版】
  17. 单片机多功能电子琴课设_基于51单片机设计的简易电子琴
  18. 美国雷曼兄弟公司简介
  19. spring基于aspectj的AOP配置 aop:aspectj-autoproxy proxy-target-class=true
  20. mmdetection(pytorch0.4.1版本)模型构建部分源码解析(转)

热门文章

  1. 美国52.2%网民每月至少登录一次Facebook
  2. 3.2亿人每天都在刷抖音,而他们却看这几个公众号!
  3. 现在有些公众号我真的看不惯
  4. webpack核心提炼
  5. for循环与foreach的性能比较
  6. 搜索控制器UISearchController的使用
  7. linux下iptables详解
  8. 【BZOJ1923】[Sdoi2010]外星千足虫 高斯消元
  9. VS2013默认打开HTML文件没有设计视图的解决办法
  10. 一个 结构体保存和窗口位置大小记录的类