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

系列文章目录

编程小白的自学笔记三(Python正则表达式)

编程小白的自学笔记二(用python处理表格文件)

编程小白的自学笔记一(用python处理表格文件)


目录

系列文章目录

前言

一、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个。最后我的理解是字符串和表达式是一个整体,我们不能以逗号为分隔符将他们分开看。
  4. 还遇到一个问题是^(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()方法查找所有匹配项。

猜你喜欢

转载自blog.csdn.net/m0_49914128/article/details/131446033
今日推荐