编程小白的自学笔记四(正则表达式模块search函数)

简介: 编程小白的自学笔记四(正则表达式模块search函数)

前言

昨天学的还是比较简单的,今天学模块一下难度就上去了,反复实验,才感觉理解了,如果有错误,希望大佬批评指正。


一、search函数的使用方法

search函数用于搜索字符串,当遇到第一个满足条件的子串时就会返回。search包含三个参数,分别是pattern、string、flags,分别表示用于匹配的正则表达式、待处理的原字符串、标志位,用于指定在查找过程中是否处理大小写。search返回的结果必须用group()方法查看结果。我们先来看看代码:

import re
string = 'Hello Word,hello Python,hello r'
p = r"^(hello) (\w+),(\w+) (\w+),(\w+) r$"
data = re.search(p,string,re.I)
print('获取到匹配字符:',data.group())
print('所有匹配的组:',data.groups())
print('获取第二组的值:',data.group(2))

二、遇到的问题和个人理解

说明几点我理解的情况和遇到的问题:

  1. 该正则表达式p的意思是hello开头,r结尾,中间是任意字符,其实就是对应我们输入的字符串。
  2. 根据1,所以我们search函数获取到的字符串是全部的string,re.I是不区分大小写。
  3. 在这里我首先遇到的难理解部分就是所有匹配的组,也就是groups()方法返回的列表有5个元素,我一开始以为p会按照逗号进行隔开,按照三种不同的表达式进行匹配,按照满足条件即返回原则,那么返回的内容应该为(‘hello word’,’hello word’,’hello r’),所有匹配的组应该是三个,但事实上是5个。最后我的理解是字符串和表达式是一个整体,我们不能以逗号为分隔符将他们分开看。还遇到一个问题是^(hello)以hello开头,hello是被匹配到的,并且放在第一组,以r结尾,r也是被匹配到的,但是r没有放在最后一组,r并没有输出,我的理解是当表达式被分组以后,只会匹配子表达式输出,非子表达式不会输出。(这个地方不知道理解的对不对)

下面看输出结果:

获取到匹配字符: Hello Word,hello Python,hello r


所有匹配的组: ('Hello', 'Word', 'hello', 'Python', 'hello')


获取第二组的值: Word


可以看到,字符整体是符合正则表达式的,所以被匹配到。所有被匹配的组都是满足子表达式的,r不在分组里,所以没有输出。为此我添加了一行代码进行实验。


print(re.findall('\w+ r$',string))


此代码输出结果为['hello r'],可以看到hello和r均输出,如果改成print(re.findall('(\w+) r$',string)),输出结果为['hello'],r没有输出。如果改成print(re.findall('(\w)+ (r)$',string)),那么输出结果又变为[('hello', 'r')],r作为分组进行输出。由此可见,分组之后,只会返回分组的内容,未被分组的不会返回。


总结

search()函数是Python中re模块提供的一个用于在字符串中查找匹配正则表达式的子串的函数。它的语法如下:

re.search(pattern, string, flags=0)


其中,参数含义如下:

  • pattern:要查找的正则表达式。
  • string:要在其中查找匹配项的字符串。
  • flags:可选参数,用于控制正则表达式的匹配方式。常用的标志包括:
  • re.IGNORECASE:忽略大小写。
  • re.MULTILINE:多行模式,支持""^"和"$"匹配每一行的开头和结尾。
  • re.DOTALL:使"."匹配包括换行符在内的所有字符。
  • re.VERBOSE:详细模式,可以添加注释来描述正则表达式。


search()函数返回一个匹配对象,如果没有找到匹配项,则返回None。可以使用匹配对象的方法和属性获取匹配项的信息,例如:

  • group():返回整个匹配项。
  • start():返回匹配项在字符串中的起始位置。
  • end():返回匹配项在字符串中的结束位置。
  • span():返回一个元组,包含匹配项在字符串中的起始位置和结束位置。
  • groups():返回一个包含所有捕获组的元组。
  • groupdict():返回一个字典,包含所有命名捕获组及其对应的值。
  • regex.compile(pattern).findall(string):将正则表达式编译成Pattern对象后,使用findall()方法查找所有匹配项。
相关文章
|
7月前
|
JavaScript 前端开发
JavaScript随手笔记 --- 用正则表达式匹配字符串是否为运算公式
JavaScript随手笔记 --- 用正则表达式匹配字符串是否为运算公式
|
20天前
|
机器学习/深度学习 缓存 JavaScript
简单粗暴的正则表达式笔记
简单粗暴的正则表达式笔记
73 25
|
1月前
|
Python
在Python中,可以使用内置的`re`模块来处理正则表达式
在Python中,可以使用内置的`re`模块来处理正则表达式
47 5
|
3月前
|
机器学习/深度学习 缓存 JavaScript
简单粗暴的正则表达式笔记
简单粗暴的正则表达式笔记
45 5
|
4月前
|
Python
告别死记硬背:掌握Python正则表达式re模块的高效应用&[面向百度编程]
Python中正则表达式的高效应用,通过内置的`re`模块,讲解了如何匹配、提取和替换字符串,并提供了相关示例代码,同时提倡通过实践来掌握正则表达式的使用,而不是仅仅依赖网络搜索。
54 1
|
6月前
|
Python
Python中re模块的正则表达式
【6月更文挑战第2天】了解Python的re模块,它是处理正则表达式的核心工具。正则表达式用于在文本中查找特定模式。本文讨论了re模块的用法和技巧,包括导入模块、匹配、分组、替换文本、编译正则表达式以及使用预定义字符类、量词、锚点等高级功能。通过实例展示了如何在Python中执行这些操作,帮助提升文本处理能力。掌握这些技巧将使你更有效地利用正则表达式解决字符串处理问题。
|
7月前
|
Python
Python中的`re`模块:深入探索正则表达式的处理
正则表达式(Regular Expression,简称regex或regexp)是一种强大的文本处理工具,能够用来匹配、查找和替换复杂的文本模式。Python的`re`模块提供了正则表达式的相关功能,使得在Python中处理正则表达式变得非常简单和直观。
N..
|
7月前
|
JavaScript 前端开发 PHP
web编程的正则表达式
web编程的正则表达式
N..
65 1
|
7月前
|
机器学习/深度学习 Rust JavaScript
Rust 笔记:Rust 语言中应用正则表达式
Rust 笔记:Rust 语言中应用正则表达式
486 1
|
7月前
|
Python
除了`re`模块,还有哪些库可以用于正则表达式的匹配?
【2月更文挑战第11天】【2月更文挑战第31篇】
68 0