search()和match()函数都是正则表达式中的匹配函数,二者有何区别呢?

  1、match()从string的开始位置进行正则匹配,即从0位置开始匹配,若匹配上则返回一个match对象,否则返回none

import re
m=re.match('\d{3}-\d{3}-\d{4}','My home phone number is 456-963-1125,My office number is 456-639-1125')
if m:
print(m.group(0))
else:
print('not matched') 运行结果是 not matched
  2、search()函数扫描整个string,寻找第一个正则匹配的位置,若找到,则返回一个match对象,否则返回none,同样是上面的例子,使用search()函数运行
import re
m=re.search('\d{3}-\d{3}-\d{4}','My home phone number is 456-963-1125,My office number is 456-639-1125')
if m:
print(m.group(0))
else:
print('not matched') 运行结果是 456-963-1125
  3、可以在正则表达式前加^来强制search()函数从头开始匹配
import re
m=re.search('^\d{3}-\d{3}-\d{4}','My home phone number is 456-963-1125,My office number is 456-639-1125')
if m:
print(m.group(0))
else:
print('not matched') 运行结果是 not matched
  4、MULTILINE模式下,match()函数只在第一行的string中进行匹配,而加了^限制的search()函数会在多行进行匹配
m=re.match('X', 'A\nB\nX', re.MULTILINE)
if m:
print(m.group(0))
else:
print('not matched') 运行结果是 not matched
m=re.search('^X', 'A\nB\nX', re.MULTILINE)
if m:
print(m.group(0))
else:
print('not matched') 运行结果是 X   除了match()和search()外,findall()方法将返回被查找字符串中的所有匹配 1、如果调用在一个没有分组的表达式上,将返回一个匹配字符串列表

>>>
>>> phoneNumRegex=re.compile(r'\d{3}-\d{3}-\d{4}')
>>> phoneNumRegex.findall('Home:021-364-8975 Office:021-876-6934')
['021-364-8975', '021-876-6934']
>>>

2、如果调用在一个有分组的表达式上,将返回一个匹配字符串的元组的列表

>>>
>>> phoneNumRegex=re.compile(r'(\d{3})-(\d{3}-\d{4})')
>>> phoneNumRegex.findall('Home:021-364-8975 Office:021-876-6934')
[('021', '364-8975'), ('021', '876-6934')]
>>>

3、如果没有字符串中没有相应的匹配,将会返回一个空列表

>>>
>>> phoneNumRegex=re.compile(r'\d{3}-\d{3}-\d{4}')
>>> phoneNumRegex.findall('Home:021-364-897 Office:021-876-693')
[]
>>>

Python 正则表达式 search vs match的更多相关文章

  1. Python里面search()和match()的区别?

    match()函数只检测RE是不是在string的开始位置匹配,search()会扫描整个string查找匹配, 也就是说match()只有在0位置匹配成功的话才有返回,如果不是开始位置匹配成功的话, ...

  2. Python里面search()和match()的区别

    转自https://www.cnblogs.com/aaronthon/p/9435967.html match()函数只检测字符串开头位置是否匹配,匹配成功才会返回结果,否则返回None searc ...

  3. python正则表达式基础,以及pattern.match(),re.match(),pattern.search(),re.search()方法的使用和区别

    正则表达式(regular expression)是一个特殊的字符序列,描述了一种字符串匹配的模式,可以用来检查一个字符串是否含有某种子字符串. 将匹配的子字符串替换或者从某个字符串中取出符合某个条件 ...

  4. python正则表达式模块re:正则表达式常用字符、常用可选标志位、group与groups、match、search、sub、split,findall、compile、特殊字符转义

    本文内容: 正则表达式常用字符. 常用可选标志位. group与groups. match. search. sub. split findall. compile 特殊字符转义 一些现实例子 首发时 ...

  5. 第11.3节 Python正则表达式搜索支持函数search、match、fullmatch、findall、finditer

    一. 概述 re模块的函数search.match.fullmatch.findall.finditer都是用于搜索文本中是否包含指定模式的串,函数的参数都是一样的,第一个参数是模式串.第二个是搜索文 ...

  6. python正则表达式详解之Match类及其方法

    1.Match对象简介 match对象通常是由正则表达式对象的match 方法,search 方法等经过匹配之后而产生.可以直接当做bool值使用,如果匹配则相当于True, 如果不匹配,则返回Non ...

  7. Boost正则表达式库regex常用search和match示例 - 编程语言 - 开发者第2241727个问答

    Boost正则表达式库regex常用search和match示例 - 编程语言 - 开发者第2241727个问答 Boost正则表达式库regex常用search和match示例 发表回复   Boo ...

  8. Python正则表达式re.match(r"(..)+", "a1b2c3")匹配结果为什么是”c3”?

    在才开始学习正则表达式处理时,老猿对正则表达式:re.match(r"(-)+", "a1b2c3") 返回的匹配结果为"c3"没有理解,学 ...

  9. Python的re模块中search与match的区别

    1.search和match: search:在整个字符中匹配,如果找不到匹配的就返回None match:在字符串开始位置匹配如果不匹配就返回None 2.效率对比: search: match:

随机推荐

  1. jquery——元素节点操作

    插入节点: 1.append()和appendTo():在现存元素的内部,从后面插入元素 <script type="text/javascript"> $(funct ...

  2. (转)不看绝对后悔的Linux三剑客之awk实战精讲

    原文:http://blog.51cto.com/hujiangtao/1923930 一.Linux三剑客之awk命令精讲 第1章 awk基础入门 1.1 awk简介 awk不仅仅时linux系统中 ...

  3. java编程如何实现从本地里读取文件1,写入到本地另一个文件2里(多种场景)

    不多说,直接上干货! 有时候,我们需要用到这样的一个场景. ReadLocalFile1WriteLocalFile2.java (以下是相当于复制,读取文件1里的全部内容,并写入到文件2里) pac ...

  4. Hive项目实战:用Hive分析“余额宝”躺着赚大钱背后的逻辑

    一.项目背景 前两年,支付宝推出的“余额宝”赚尽无数人的眼球,同时也吸引的大量的小额资金进入.“余额宝”把用户的散钱利息提高到了年化收益率4.0%左右,比起银行活期存储存款0.3%左右高出太多了,也正 ...

  5. Storm概念学习系列之Worker、Task、Executor三者之间的关系

    不多说,直接上干货! Worker.Task.Executor三者之间的关系 Storm集群中的一个物理节点启动一个或者多个Worker进程,集群的Topology都是通过这些Worker进程运行的. ...

  6. Java 内存模型(零)

    经典老图: 方法区和堆:由所有线程共享的数据区 虚拟机栈和本地方法栈和程序计数器:线程隔离的数据区 后面一步步讲这个图里面所涉及到的内容,待续...

  7. druid监控sql

    我这里是以运维的角度查看sql, 前面的配置需要开发配合,参考:https://blog.csdn.net/u010391342/article/details/80606482 1.首先在注册中心( ...

  8. Android 常用RGB值及名称

    Android   常用RGB值及名称 颜  色 RGB值 英文名 中文名 #FFB6C1 LightPink 浅粉红 #FFC0CB Pink 粉红 #DC143C Crimson 深红/猩红 #F ...

  9. apache日志设置

    转自:http://hi.baidu.com/bxhack/item/71025d3e65987d88b611db5e apache日志存放位置 Windows: <Apache安装目录> ...

  10. 查看mysql表和数据库的大小

    转自:http://xiaosu.blog.51cto.com/2914416/687835 1.查看数据库的大小 use 数据库名SELECT sum(DATA_LENGTH)+sum(INDEX_ ...