python正则怎么写

您所在的位置:网站首页 负整数正则表达式怎么写 python正则怎么写

python正则怎么写

2024-07-16 11:42| 来源: 网络整理| 查看: 265

af357830776b3edc68828c2951c7e445.png

96ea93610dd1db94e05f45a9304c6835.png

ce52c1407eeb9eff3be5937f22057653.png

a95a3d303f5198d958ee47fb99ab8b64.png

a541ff09ff0f350601a5b28b55e546e3.png

\d+  \d? \d+? \d*?

这个几个的区别:

+是贪婪的,什么都要,而且临近成为一组

?是由0,1构成,所以不存在也会输出空

+?就是不贪婪的取值,把匹配的结果按字符输出

*? 输出所有空值

Python 正则表达式入门(初级篇)

本文主要为没有使用正则表达式经验的新手入门所写。

转载请写明出处

引子

首先说 正则表达式是什么?

正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。

许多程序设计语言都支持利用正则表达式进行字符串操作。例如,在Perl中就内建了一个功能强大的正则表达式引擎。正则表达式这个概念最初是由Unix中的工具软件(例如sed和grep)普及开的。正则表达式通常缩写成“regex”,单数有regexp、regex,复数有regexps、regexes、regexen。

引用自维基百科https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F

定义是定义,太正经了就没法用了。我们来举个栗子:假如你在写一个爬虫,你得到了

一个网页的HTML源码。其中有一段

hello world

你想要把这个hello world提取出来,但你这时如果只会python 的字符串处理,那么第一反应可能是

s =

hello world

start_index = s.find('

')

然后从这个位置向下查找到下一个

出现这样做未尝不可,但是很麻烦不是吗。需要考虑多个标签,一不留神就多匹配到东西了,而如果想要非常准确的匹配到,又得多加循环判断,效率太低。

这时候,正则表达式就是首选的帮手。

干货开始

入门级别

接着说我们刚才那个例子。我们如果拿正则处理这个表达式要怎么做呢?

import re

key = r"

hello world "#这段是你要匹配的文本

p1 = r"(?"

pattern1 = re.compile(p1)

print pattern1.findall(key)

输出

['hello']

我们既然有了范围性的匹配,自然有范围性的排除。

[^]代表除了内部包含的字符以外都能匹配

还是cat,hat,mat,qat这个例子,我们想匹配除了qat以外的,那么就应该这么写:

import re

key = r"mat cat hat pat"

p1 = r"[^p]at"#这代表除了p以外都匹配

pattern1 = re.compile(p1)

print pattern1.findall(key)

输出

为了方便我们写简洁的正则表达式,它本身还提供下面这样的写法

正则表达式代表的匹配字符

[0-9]

0123456789任意之一

[a-z]

小写字母任意之一

[A-Z]

大写字母任意之一

\d

等同于[0-9]

\D

等同于[^0-9]匹配非数字

\w

等同于[a-z0-9A-Z_]匹配大小写字母、数字和下划线

\W

等同于[^a-z0-9A-Z_]等同于上一条取非

3.介绍到这里,我们可能已经掌握了大致的正则表达式的构造方式,但是我们常常会在实战中遇到一些匹配的不准确的问题。比方说:

import re

key = r"[email protected]"

p1 = r"@.+\."#我想匹配到@后面一直到“.”之间的,在这里是hit

pattern1 = re.compile(p1)

print pattern1.findall(key)

输出结果

['@hit.edu.']

呦呵!你咋能多了呢?我理想的结果是@hit.,你咋还给我加量了呢?这是因为正则表达式默认是“贪婪”的,我们之前讲过,“+”代表是字符重复一次或多次。但是我们没有细说这个多次到底是多少次。所以它会尽可能“贪婪”地多给我们匹配字符,在这个例子里也就是匹配到最后一个“.”。

我们怎么解决这种问题呢?只要在“+”后面加一个“?”就好了。

import re

key = r"[email protected]"

p1 = r"@.+?\."#我想匹配到@后面一直到“.”之间的,在这里是hit

pattern1 = re.compile(p1)

print pattern1.findall(key)

输出结果

['@hit.']

加了一个“?”我们就将贪婪的“+”改成了懒惰的“+”。这对于[abc]+,\w*之类的同样适用。

小测验:上面那个例子可以不使用懒惰匹配,想一种方法得到同样的结果

**个人建议:在你使用"+","*"的时候,一定先想好到底是用贪婪型还是懒惰型,尤其是当你用到范围较大的项目上时,因为很有可能它就多匹配字符回来给你!!!**

为了能够准确的控制重复次数,正则表达式还提供

{a,b}(代表a



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3