python正则表达式research_八Python正则表达式

正则表达式是搜索、替换和解析复杂字符串的一种强大而标准的方法,Python中的正则相关的东西全在re模块下。

1 常用的匹配

^匹配字符串的开始

$匹配字符串的结尾

\b匹配一个单词的边界

\d匹配任意数字

\D匹配任意非数字字符

x?匹配一个可选的x(匹配1次或0次x字符)

x*匹配0次或多次x

x+匹配1次或多次x

x{n,m}至少n次,至多m次x

(a|b|c)要么匹配a,要么匹配b,要么匹配c

(x)一般情况下表示一个记忆组,你可以利用re.search函数返回对象的groups()函数来获取它的值

2 一般用途

#-------------------------------------------------------------------------------

# coding: utf-8

# Purpose:正则表达式

#

# Author: zdk

#

# Created: 26/02/2013

# Copyright: (c) zdk 2013

#-------------------------------------------------------------------------------

import re

if __name__ == '__main__':

addr = "100 BROAD ROAD APT.3"

print(re.sub("ROAD","RD",addr)) # 100 BRD RD APT.3

print(re.sub(r"\bROAD\b","RD",addr)) # 100 BROAD RD APT.3

pattern = ".*B.*(ROAD)?"

print(re.search(pattern,"ROAD")) #None

print(re.search(pattern,"B")) #<_sre.sre_match object at>

(1)re.sub("ROAD","RD",addr) 利用re.sub函数对字符串addr进行搜索,满足表达式"ROAD"的用“RD”替换

(2)re.sub(r"\bROAD\b","RD",addr) ,“\b”含义是“单词的边界”,在Python中,由于字符“\”在字符串中必须转义,这会变得非常麻烦,所以Python用前缀r表示字符串中的所有字符都不转义。

(3)re.search(pattern,"ROAD") re模块有一个search函数,该函数有两个参数,一个是正则表达式,一个是字符串,search函数返回一个拥有多种方法可以描述这个匹配的对象,如果没有发现匹配,则返回None。

3 松散正则表达式

上面均是“紧凑”类型的表达式,它比较难以阅读,即使现在清楚表达式的含义,也不能保证几个月后还能记得。所以Python允许用户利用所谓的松散正则表达式来完成内联文档的需要,和一般的表达式有以下两个方面的主要区别

忽略空白符。空格符、制表符、回车符不匹配它们自身(如果你想在松散正则表达式中匹配一个空格符,你不须在它前面添加一个反斜杠符号对它进行转义)

忽略注释。和普通的Python代码一样,注释开始于#符号,结束于行尾。

#松散带有内联注释的正则表达式

pattern = """

^ # begin of string

M{0,3} # 0 to 3 M

(CM|CD|D?C{0,3}) #CM or CD or D or D 0 to 3 C

$ #end of string

"""

print(re.search(pattern,"MCM",re.VERBOSE)) #<_sre.sre_match object at>

print(re.search(pattern,"M99",re.VERBOSE)) #None

(1)当使用松散正则表达式时,最重要的一件事就是:必须传递一个额外的参数re.VERBOSE,它是re模块的一个常量,标志着待匹配的正则表达式是一个松散正则表达式。pattern的空格和注释都是被忽略的,但同时具有更好的可读性。

4 个例研究:解析电话号码

必须匹配如下电话号码:

800-555-1212

800 555 1212

800.555.1212

(800)555-1212

1-800-555-1212

800-555-1212-1234

800-555-1212x1234

800-555-1212 ext.1234

work 1-(800) 555,1212 #1234

格式比较多,我们需要知道的是800为区号,干线号为555,电话号的其他数字为1212,对于有分机号的,我们需要知道分机号为1234

phonePattern = re.compile(r'''

# don't match beginging of string

(\d{3}) # 3 digits

\D* #any number of non-digits

(\d{3}) # 3 digits

\D* #any number of non-digits

(\d{4}) # 4 digits

\D* #any number of non-digits

(\d*) #any number of digits

''',re.VERBOSE)

print(phonePattern.search('work 1-(800)555.1212 #1234').groups()) #('800', '555', '1212', '1234')

(1)一个松散正则表达式如上, 首先匹配3个数字区号(不一定从第一个字符开始,所以没有用^),接着后面匹配任意多个非数字的字符,接着匹配3个数字干线号,接着匹配任意多个非数字的字符,接着匹配4个数字号码,接着匹配任意多个非数字的字符,接着匹配任意多个数字的分机号,然后用groups函数分组,得到正确的电话号码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/367742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Win10 系统直接在目录下打开cmd

每次用cmd命令&#xff0c;就要定位到当前文件夹&#xff0c;很麻烦&#xff0c;于是想了下&#xff0c;可不可以直接定位到要操作的文件夹&#xff0c;百度了一下&#xff0c;果然&#xff0c;度娘没有让我失望&#xff0c; 美滋滋的试了下。真的可以。在此记录下&#xff0c;…

使用Apache Lucene 4.3轻松进行搜索

Lucene是用Java编写的全文搜索引擎&#xff0c;可以为任何应用程序提供强大的搜索功能。 Lucene的核心是基于文件的全文本索引。 Lucene提供API创建该索引&#xff0c;然后向该索引添加和删除内容。 此外&#xff0c;它允许使用功能强大的搜索算法从该索引中搜索和检索信息。 可…

Html5中新增的表单元素详解

HTML5 的新的表单元素&#xff1a; HTML5 拥有若干涉及表单的元素和属性。•datalist•keygen•outputdatalist 元素datalist 元素规定输入域的选项列表。列表是通过 datalist 内的 option 元素创建的。如需把 datalist 绑定到输入域&#xff0c;请用输入域的 list 属性引用 da…

今日学到乱写

EXPLAIN 直接上图 一个个说&#xff1a; select_type 查询中每个select子句的类型&#xff08;简单OR复杂&#xff09; a. SIMPLE&#xff1a;查询中不包含子查询或者UNION b. 查询中若包含任何复杂的子部分&#xff0c;最外层查询则被标记为&#xff1a;PRIMARY c. 在SELECT或…

JavaScript日期格式化处理

1 /**2 * 获取年月&#xff0c;如&#xff1a;2018-083 */4 export function getMonth () {5 return formatDate(new Date(), yyyy-MM)6 }7 8 /**9 * 10 * param {*} date 11 * param {*} fmt : yyyy-MM、yyyy-MM-dd、yyyy-MM-dd hh:mm、yyyy-MM-dd hh:mm:ss 12 */ 13 …

在JBoss AS 7上部署BroadleafCommerce 2.0

前2个步骤与Broadleaf的具体联系并不紧密&#xff0c;但提到该步骤使执行&#xff08;复制/粘贴&#xff09;这些步骤变得容易。 步骤&#xff03;1&#xff1a;在JBoss AS中配置数据源。 <datasource jta"true" jndi-name"java:jboss/datasources/Broadlea…

hash的算法 java_【数据结构与算法】一致性Hash算法及Java实践

追求极致才能突破极限一、案例背景1.1 系统简介首先看一下系统架构&#xff0c;方便解释&#xff1a;页面给用户展示的功能就是&#xff0c;可以查看任何一台机器的某些属性(以下简称系统信息)。消息流程是&#xff0c;页面发起请求查看指定机器的系统信息到后台&#xff0c;后…

MySQL之汇总数据(AVG,COUNT,MAX,MIN,SUM)

备注&#xff1a;sum和count的不同&#xff1a;count()函数里面的参数是列名的的时候,那么会计算有值项的次数。 //行数Sum()函数里面的参数是列名的时候&#xff0c;是计算列名的值的相加&#xff0c;而不是有值项的总数。 //行内数据的和table testFieldTypeNullKeyDefault…

使用HTML5实现地理位置定位

HTML5 Geolocation&#xff08;地理定位&#xff09;用于定位用户的位置。定位用户的位置HTML5 Geolocation API 用于获得用户的地理位置。鉴于该特性可能侵犯用户的隐私&#xff0c;除非用户同意&#xff0c;否则用户位置信息是不可用的。浏览器支持Internet Explorer 9、Fire…

暑假第五周计划

在上一周根据视频在电脑上安装了一个伪Hadoop&#xff0c;只有一个虚拟机&#xff0c;并且配置好了环境变量&#xff0c;可以在命令行运行程序自带的一些例子&#xff0c;比如计算圆周率&#xff0c;统计文本文件的字符数 遇到的问题主要就是对linux的操作命令不熟悉&#xff0…

Java EE CDI依赖关系消歧示例

在本教程中&#xff0c;我们将向您展示如何避免CDI bean中的依赖关系消除歧义。 在CDI中&#xff0c;我们可以为应用程序中不同客户端的接口的多个实现实现依赖项注入。 依赖关系消除歧义的问题是客户端如何在不同的实现中调用特定的实现&#xff0c;而不会发生任何错误。 为了…

linux java 安装配置_类Linux环境安装jdk1.8及环境变量配置详解

配置很简单&#xff0c;但是每次都要查一下&#xff0c;索性就记录下1. 安装前准备1.1 创建安装目录&#xff0c;习惯上通常安装在/usr/local/jdk8目录下mkdir /usr/local/jdk81.2 查看是否安装过jdk&#xff0c;安装前要把之前的删除干净# 通过jdk环境变量查看echo $JAVA_HOME…

Mac版Anaconda安装R语言iGraph包

Anaconda官网给出的R语言Igraph包安装方法&#xff1a;https://anaconda.org/r/r-igraph 查阅Anaconda官方文档&#xff0c;可以通过以下控制台命令安装R语言Igraph包。 conda install -c r r-igraph 在控制台执行后&#xff0c;系统可能会提示未找到conda指令&#xff0c; 所以…

Html5中Canvas(画布)的使用

什么是 Canvas&#xff1f;HTML5 的 canvas 元素使用 JavaScript 在网页上绘制图像。画布是一个矩形区域&#xff0c;您可以控制其每一像素。canvas 拥有多种绘制路径、矩形、圆形、字符以及添加图像的方法。创建 Canvas 元素向 HTML5 页面添加 canvas 元素。规定元素的 id、宽…

20180813-20180817

这周没怎么学...&#xff08;哼没学还这么理直气壮&#xff01;&#xff09; 上周公司项目更新了一个版本 里面不小心用了es6的代码 然后好多低版本的手机就跑不起来了 这还是上线了半天之后才发现的 在这说一下 ios10.3以前的版本不支持es6 Android6.0以下不支持es6 最近一直…

多个动态包含一个JSF标签

每个JSF开发人员都知道ui&#xff1a;include和ui&#xff1a;param标签。 您可以包括一个facelet&#xff08;XHTML文件&#xff09;并传递一个对象&#xff0c;该对象将在包含的facelet中可用&#xff0c;如下所示&#xff1a; <ui:include src"/sections/columns.x…

java map遍历最快_Java Map遍历速度最优解

第一种:Map map new HashMap();Iterator iter map.entrySet().iterator();while (iter.hasNext()) {Map.Entry entry (Map.Entry) iter.next(); Object key entry.getKey();Object val entry.getValue();}效率高,以后一定要使用此种方式!第二种:Map map new HashMap();It…

[JLOI2014]松鼠的新家

嘟嘟嘟 这还是一道树链剖分板子题呀&#xff01; 从1到n - 1枚举a[i]&#xff0c;每一次使节点a[i]到a[i 1]的路径加1&#xff0c;但这样的话除a[1]&#xff0c;每一个点都多加了一个1&#xff0c;所以输出答案的时候减1即可。 1 #include<cstdio>2 #include<iostrea…

Html5中的Video元素使用方法

现在互联网视频大都使用Flash来实现。但是不同的浏览器可能使用不同的插件。在HTML5中则提供了一个统一的方式来展示视频内容。HTML5 video在Internet Explorer 9, Firefox, Opera, Chrome, 和Safari都支持。IE8及其更早的浏览器不支持。 代码如下 <SPAN style"COLOR:…

CSS3-背景(background-image、background-size、background-origin、background-clip)

CSS3中新的背景属性&#xff1a;background-image、background-size、background-origin、background-clip 背景图片&#xff1a;background-image CSS3中可以通过background-image属性添加背景图片。 不同的背景图像和图像用逗号隔开&#xff0c;所有的图片中显示在最顶端的为…