Python中的正则表达式,python正则表达式或者用法

  Python中的正则表达式,python正则表达式或者用法

  

python教程栏目讲解正则表达式知识。

  也有很多应用正则表达式的场景。常见的例子有:搜索引擎的搜索、爬虫结果的匹配、文本数据的提取等。所以它是一项硬技能,是掌握甚至掌握正则表达式所必需的。

  00-1010正则表达式是一个特殊的字符序列,由普通字符和元字符组成。元字符可以帮助您轻松检查一个字符串是否匹配某种模式。

  Python提供了一个强大的正则表达式处理模块,即re模块,它是Python的内置模块。

  下面,我将带您看一个带有以下代码的介绍性演示示例:

  导入rereg _ string= hello9527python @王采。@! :xiaoqiang

  reg= hello result=re . find all(reg,reg_string)

  打印(结果)复制代码。这里reg_string是我们的普通字符,reg是我们的元字符。

  我们使用re模块中的findall函数进行匹配,返回的结果是list数据类型。

  我们使用正则表达式只是为了在一个很长的字符串中找到我们需要的字符串片段。

  00-1010 Python中常见的元字符及其含义如下:

  元字符含义。匹配除换行符以外的任何字符\ \\\\w匹配数字字母下划线中文字符\ \\\\s匹配任何空白字符\ \\\\d匹配所有数字\ \\\\b匹配单词$的开头或结尾匹配字符串的开头和结尾。下面,我们具体使用Python中常见的元字符。还是用上一个例子吧。这一次,我们需要匹配我们在reg_string中的编号。我们只需要把reg改成\ \\\\d,代码如下图所示。

  举个例子,如果我们在前一个reg前面加一个“hello”,表示我们匹配的是字符串开头的hello,那么结果就是一,也就是我们字符串开头的hello。

  如果,我们把reg改成\ \\\\w,代码如下图所示。

  这是为了匹配带下划线的数字和字母,包括我们的汉字。

  00-1010 Python中常见的反义代码及其含义如下:

  反义代码含义\ \\\\W匹配任何非带下划线的中文数字字符\ \\\\S匹配任何非空白字符\ \\\\D匹配非数字字符\ \\\\B匹配非单词的开头或结尾[a]匹配除A以外的任何字符[abcd]匹配除abcd以外的任何字符。事实上,记忆

  以下是具体的例子。

  导入re reg _ string= hello9527python @王采。@! :xiaoqiang

  reg=\\\\D re.findall(reg,reg_string)

  [h , e , l , l , o , p , y , t , h , o , n , w , a , n , g , c , a , I ,。, @, !, :,

  39;x', 'i', 'a', 'o', 'q', 'i', 'a', 'n', 'g']

  >>> reg = "[^a-p]"['9', '5', '2', '7', 'y', 't', '@', 'w', '.', '@', '!', ':', 'x', 'q']复制代码

限定符

什么是限定符?就是限定我们匹配的个数的东西。

  Python中常见限定符 及其含义如下:

  限定符含义*重复零次或多次+重复一次或多次?重复零次或一次{n}重复n次{n,}重复n次或更多次{n,m}重复n次到m次 {1,3}我们还是用我们之前的reg_string,这次我们限定了元字符为\\\\d{4},也就是我们的匹配的数字必须是4个。

  下面,我们来提高难度,匹配字母和数字,限定个数为4个。

  这样我们可以使用[0-9a-z]{4},作为我们的元字符,[0-9a-z]代表了0到9的十个数字和a到z的小写26个英文字母。[0-9a-z]{4}限定了个数为4个。

  我们打印输出下。

  如果遇到了不是在[0-9a-z]范围内,就会跳过,直到后面的4个都是在[0-9a-z]范围内就打印输出。

  

匹配ip地址

在互联网中,一台主机只有一个IP地址。IP地址用于在TCP/IP通信协议中标记每台计算机的地址,通常用于十进制来表示,如192.168.1.100。

  在window系统中,我们可以通过ipconfig查看我们的ip。在linux系统中,我们可以通过ifconfig查看我们的ip。

  我们的ip字符串是这样子的:ip = "this is ip:192.168.1.123 :172.138.2.15"

  下面要求使用正则表达式,将ip匹配出来。

  其实,我们主要编写元字符。比如:reg = "\\\\d{3}.\\\\d+.\\\\d+.\\\\d+",因为第一个数字必须是三位数开头,我们可以设定\\\\d{3}固定起来。

  我们除了可以使用findall,还可以使用search,我们把元字符reg = "(\\\\d{1,3}.){3}\\\\d{1,3}"

  这元字符中的\\\\d{1,3}.指定是我们ip前三个数字,后面加{3}就是重复3次。\\\\d{1,3}指的就是我们ip最后一个数字。

  但是search和findall是有区别的,search只能匹配第一个,我们需要使用列表取出第一个,而findall匹配所有。

  

组匹配

什么是组匹配,比如说这里边我有一个字符串s = this is phone:13888888888 and this is my postcode:012345,我需要你把手机号和验证码匹配出来。

  因为,我们要匹配两个,而已每个的元字符都是不一样的。所以,我们需要分组匹配。

  正则表达式的括号表示分组匹配,括号中的模式可以用来匹配分组的内容。

  于是我们的元字符就变成:reg = this is phone:(\\\\d{11}) and this is my postcode:(\\\\d{6})

  我们一般使用search进行分组匹配,上次我是不是说过search需要使用列表取出来,这里的组匹配也是一样,不过这里用的是group()方法。group(1)代表了我们的手机号,group(2)代表了我们的验证码,而group(0)代表了我们的手机号和验证码,代码如下图所示。

  在正则表达式中,除了findall和search用法,还有一个match用法。

  match用法只匹配开头的,也是需要group()取出来,下图match的例子。

  这是的re.I是忽略大小写的意思。

  

贪婪与非贪婪

贪婪与非贪婪模式影响的是被量词修饰的子表达式的匹配行为,贪婪模式在整个表达式匹配成功的前提下,尽可能多的匹配,而非贪婪模式在整个表达式匹配成功的前提下,尽可能少的匹配。

  贪婪和非贪婪有几个非常重要的操作符。

  操作符含义*重复零次或更多次+重复一次或更多次?重复零次或一次比如说这里边我有一个字符串reg_string = pythonnnnnnnnnpythonHelloPytho,我们先使用贪婪的模式下的元字符:reg = "python*"

  贪婪模式下的reg = "python*",意味着n重复零次或更多次。所以我们看到了第一关结果的pythonnnnnnnnn尽可能多的匹配。

  下面使用非贪婪的模式下的元字符:reg = "python*?",reg = "python+?",reg = "python??"

  非贪婪模式下的reg = "python*",意味着n零次或一次,所以我们没有看到pythonnnnnnnnn的结果。

  

手机号码验证

首先,我们要知道我们的手机号码是什么开头的?

  移动手机号码开头有16个号段:134、135、136、137、138、139、147、150、151、152、157、158、159、182、187、188。

  联通手机号码开头有7种号段:130、131、132、155、156、185、186。

  电信手机号码开头有4个号段:133、153、180、189。

  这样我们就可以在开头做事情了,先判断开头是不是上面的号段, regex = "^((13[0-9])(14[57])(15([0-3][5-9]))(18[0,5-9]))\\\\d{8}$",就是我们的元字符,代码如下:

  

import redef checkCellphone(cellphone): regex = "^((13[0-9])(14[57])(15([0-3][5-9]))(18[0,5-9]))\\\\d{8}$" result = re.findall(regex,cellphone) if result: print("匹配成功") return True

   else: print("匹配失败") return Falsecellphone = '13717378202'checkCellphone(cellphone)

  匹配成功True复制代码

匹配邮箱合法性

下面,我们进行一个作业,就是来匹配我们的邮箱号码。

  作业的答案如下:

  

import redef checkEmail(email): regex_1 = '^(\\\\w+)@sina.com$'

   regex_2 = '^(\\\\w+)@sina.com.cn$'

   regex_3 = '^(\\\\w+)@163.com$'

   regex_4 = '^(\\\\w+)@126.com$'

   regex_5 = '^[1-9][0,9]{4,}+@qq.com$'

   regex = [regex_1 ,regex_2 ,regex_3, regex_4, regex_5]

   for i in regex:

   result = re.findall(i,email)

   if result:

   print("匹配成功")

   return True else:

   print("匹配失败")

   return False

  email = 'sdjflsdjkl@sina.com'checkEmail(email)复制代码

正则表达式测试工具

打开开源中国提供的正则表达式测试工具 tool.oschina.net/regex/,输入待匹…

  例如,输入下面这段待匹配的文本:

  

Hello, my phone number is 123455678 and email is runsen@qq.com, and my website is https://blog.csdn.net/weixin_44510615.复制代码
这段字符串中包含了一个电话号码和一个电子邮件,接下来就尝试用正则表达式提取出来,如图所示。

  在网页右侧选择 “匹配 Email 地址”,就可以看到下方出现了文本中的 E-mail。如果选择 “匹配网址 URL”,就可以看到下方出现了文本中的 URL。是不是非常神奇?

  

相关免费学习推荐:python教程(视频)

  

以上就是详细讲解 Python中的正则表达式的详细内容,更多请关注盛行IT软件开发工作室其它相关文章!

  

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: