导航:首页 > 编程语言 > python正则尖括号

python正则尖括号

发布时间:2023-02-10 08:25:57

① 想请教python 正则表达式

这你就需要了解正则表达式的贪婪匹配和非贪婪匹配

在此例中

#.*是贪婪匹配模式,所谓贪婪匹配就是在整个表达式匹配成功的前提下,尽可能多的匹配,
#也就是所谓的“贪婪”,通俗点讲,就是看到想要的,有多少就捡多少,除非再也没有想要的了。


#.*?是非贪婪模式,所谓非贪婪模式就是在整个表达式匹配成功的前提下,尽可能少的匹配,
#也就是所谓的“非贪婪”,通俗点讲,就是找到一个想要的捡起来就行了,
#至于还有没有没捡的就不管了

#举个例子
#字符串"abcdccd"
#那么"a.*"匹配的是"abcdccd",贪婪模式,从a开始的我都要了
#"a.*?"匹配的是"a",非贪婪模式,满足条件的情况下,我只要a就行了
#"a.*?d"匹配的是"abcd",非贪婪模式,我只要从a开始最快到d的字符串就行了
#"a.*d"匹配的是"abcdccd",贪婪模式,我只要从a开始,到最远d的就可以了

不知道这样讲解时否明白

② python 正则匹配xml中的文本

importre
str1="<paraValuename="startNum">100</paraValue>"
result=re.search(r'>(.*?)<',str1)
printresult.group(1)

③ python正则表达式匹配一个空格分隔的所有单词对

findall应该只能按着你的patten顺次往后找,所以出不来你想要的那种结果吧,倒不如直接用split分割然后写个循环输出你要的结果
import re

patt = r'\W+'
str1 = 'as jk jsd eqwe dsads'
reg = re.compile(patt)

res = reg.split(str1)
lst = []
for x in res:
if x:
length_flag = 0
else:
length_flag = 1
for x in range(0,len(res)-length_flag-1):
lst.append((res[x],res[x+1]))
print(lst)
输出结果就是你要的了
[('as', 'jk'), ('jk', 'jsd'), ('jsd', 'eqwe'), ('eqwe', 'dsads')]
我用的python3所以print带了括号,
另外我是个没啥基础刚自学的 方法可能非常笨拙

④ python中尖括号是什么参数

日我对Python 中的尖括号"的所有搜索都给出了关于文档或 装饰器语法,我很确定这两者都不是,因为它看起来像实际的逻辑. 上述Python 代码中的尖..

⑤ Python 正则化匹配html网页尖括号 匹配不了

正确的html闭标签里,是以/开头的,所以网页的源代码不可能是<\/span>,<span class=\"name\">小小少年lala<\/span>\r\n\t里的前三个\是为了在字符串里显示“和/而已,并不是字符串的内容。

网页应该是
<span class="name">小小少年lala</span>\r\n\t

你的正则应该用
p=re.compile('<span class="name">(.*)<\/span>')

⑥ python 正则 (\d{1,3}\.){3}\d{1,3},打印出的结果不对啊...()后面加{3}感觉没什么用啊!

括号是捕获组的意思。也就是你要捕获的内容。。在你这个事例中就是1.。。。

而你要想对d{1,3}.这个模式匹配但不捕获就可以用非捕获组。。就是

r'(?:d{1,3}.){3}d{1,3}'

用`?:`来表示这个括号内容不想捕获。。

⑦ Python其实很简单 第十一章 正则表达式

正则表达式是一个特殊的字符序列,它用来检查一个字符串是否与某种模式匹配。正则表达式在编译程序中至关重要,但并不是每个人都需要特别深入的学习和掌握。在此,只介绍一些最基本的应用。

1、元字符

元字符是构成正则表达式的一些特殊字符。在正则表达式中,元字符被赋予了新的含义。

下面介绍一些常用的元字符及其含义:

. 匹配除换行符以外的任意字符。

w 匹配字母、数字、下划线或汉字。

W 匹配w所匹配的字符以外的字符。

s 匹配单个空白符(包括Tab键和换行符)。

S 匹配除s匹配的字符以外的字符。

d 匹配数字。

b 匹配单词的分界符,如:空格、标点符号或换行符。

^ 匹配字符串的开始

$ 匹配字符串的结束

2、限定符

限定符是在正则表达式中用来指定数量的字符。常用的限定符有:

? 匹配前面的字符0或1次。如:zo?m可以匹配zom和zm,但不能匹配 zoom

+ 匹配前面的字符1或n次。如:zo?m可以匹配zom和zoom,但不能匹配zm

* 匹配前面的字符0或n次。如:zo?m可以匹配zom、zoom和zm

{n} 匹配前面的字符n次。如:zo{2}m可以匹配zoom,但不能匹配zom和zm

{n,} 匹配前面的字符至少n次。如:zo{1,}m可以匹配zom和zoom,但不能匹配zm

{n,m} 匹配前面的字符至少n次,最多m次。如:zo{1,2}m可以匹配zom和zoom,但不能匹配zm

3、方括号”[ ]”的用途

方括号“[ ]”里可以列出某个字符范围。如:[aeiou]表示匹配任意一个元音字母,[zqsl]表示匹配姓氏“赵钱孙李”的拼音第一个字母。

4、排除字符

方括号”[ ]”中的“^”字符表示排除的意思,如:[^aeiou]表示匹配任意一个非元音字母的字符。

5、选择字符

字符“|”相当于“或”。如:(^d{3}[-]d{8})|(^d{4}[-]d{7})$可以匹配形如” - ”或“ - ”的电话号码格式。

6、转义字符

对于已经用于定义元字符和限定符的字符,需要加转义符“”来表示。

如:为了匹配形如“192.168.0.1”的IPv4地址(1~255.0~255.0~255.0~255),可以用这样的正则表达式:^(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]).(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[1-9]|0).(25[0-5]|2[0-4][0-9]|[0,1]{1}[0-9]{2}|[1-9]{1}[0-9]{1}|[0-9])$

这里解释一下第一段IP地址的规则,取值范围为1~255,可分解为以下情况:

250~255:25[0-5];

200~249:2[0-4][0-9];

100~199:[01]{1}[0-9]{2};

0~99: [0-9]{1}[1-9]

再加上”.”: .

其他三段地址和第一段相似。

7、“( )”可以用于分组

在正则表达式中,用“( )”括起来的部分是一个整体。

8、r(或R)的意义

在正则表达式中,为了保证模式字符串为原生字符串(没有经过加工处理的字符串),可以在模式字符串前加上一个字符‘r’或‘R’。例如:

# 这里用到对的re.match()方法接下来介绍

>>> import re # 导入re模块

>>> re.match('bPy[a-z]+','Python') # 表达式'bPy[a-z]+'不能匹配’Python’

>>> re.match('bPy[a-z]+','Python') # 表达式'bPy[a-z]+'可以匹配’Python’

在上述代码中,原本要用作匹配单词开始或结束的元字符’b’在表达式中字符串中会被视为转义一个字符‘b’,为了转义’b’就不得不再加一个’’符号。

也可以采用下面的方法:

>>> re.match(r'bPy[a-z]+','Python') #加字符’r’,可以保证原生字符串

9、match()方法

Match()方法 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match() 就返回 none。

语法格式:

re.match(pattern, string, [flags])

其中,pattern表示匹配的正则表达式;string是要匹配的字符串;flags表示标志位,用于控制正则表达式的匹配方式,如:re.I表示不区分大小写。

例:

import re #导入re模块

print(re.match('www', 'www.python.org/').span()) #span()函数可以获取匹配的位置

print(re.match('org', 'www.python.org'))

输出结果为:

(0, 3) #在位置0到3(不包括3)匹配成功

None #从起始位置未能匹配成功

10、search()方法

search()方法用于在整个字符串中搜索第一个匹配的值,如果匹配成功,则返回Match对象,否则返回None。

语法格式:

re.search(pattern, string, [flags])

其中,pattern表示匹配的正则表达式;string是要匹配的字符串;flags表示标志位,用于控制正则表达式的匹配方式,如:re.I表示不区分大小写。

例如:

>>> re.search(r'Pyw+','It's easy to use Python, but it's not easy to learn Python.')

可以看出,目标字符串“It's easy to use Python, but it's not easy to learn Python.”中一共有两个‘Python’,search()方法可以从字符串的起始位置开始查找到‘Python’,当找到第一个匹配值后就停止查找,返回位置信息。

match()和search()的比较

match()要求目标字符串的起始位置就能匹配,search()对目标字符串全段进行逐次匹配,只要首次匹配成功就停止匹配。

请看下例:

>>> import re

>>> print(re.match(r'Pyw+','It's easy to use Python, but it's not easy to learn Python.'))

输出结果:None

11、findall()方法

findall()方法用于在整个字符串中搜索所有匹配的值,如果匹配成功,则返回以匹配值为元素的列表,否则返回空列表。

语法格式:

re.findall(pattern, string[, flags])

其中,pattern表示匹配的正则表达式;string是要匹配的字符串;flags表示标志位,用于控制正则表达式的匹配方式,如:re.I表示不区分大小写。

例:

>>> import re

>>>print(re.findall(r'Pyw+','It's easy to use Python, but it's not easy to learn Python.'))

输出结果:['Python', 'Python']

可以看出,findall()的结果没有指出匹配的具体位置。

12、正则表达式的应用

字符串替换

这里要用到sub()方法。它的语法格式如下:

re.sub(pattern, repl, string [,count] [,flgs])

其中,pattern是模式字符串;repl是用于替换的字符串;string是原字符串;可选参数count为模式匹配后替换的最大次数,省缺表示替换所有的匹配;可选参数flags的意义与前面的方法的该参数一致。

例:

>>> import re

>>> str1='x=36.567 y=123.234'

>>> str2=re.sub('.d+','',str1) #用空格代替小数点及其后的数字

>>> print(str2)

输出结果:x=36 y=123

分隔字符串

这里要用到split()方法。它的返回值为一个列表,它的语法格式如下:

re.split(pattern, string [,maxsplit] [,flgs])

其中,pattern是模式字符串;string是原字符串;可选参数maxsplit为最大拆分次数,省缺表示拆分所有的匹配;可选参数flags的意义与前面的方法的该参数一致。

例:

>>> import re

>>> str='白日依山尽,黄河入海流。欲穷千里目,更上一层楼!'

>>> re.split(r',|。|!',str) #按照“,”、“。”、“!”分隔字符串。

['白日依山尽', '黄河入海流', '欲穷千里目', '更上一层楼', '']

注意,返回值列表中多出了一个空字符。

⑧ Python常用的正则表达式处理函数详解

正则表达式是一个特殊的字符序列,用于简洁表达一组字符串特征,检查一个字符串是否与某种模式匹配,使用起来十分方便。

在Python中,我们通过调用re库来使用re模块:

import re

下面介绍Python常用的正则表达式处理函数。

re.match函数

re.match 函数从字符串的起始位置匹配正则表达式,返回match对象,如果不是起始位置匹配成功的话,match()就返回None。

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

pattern:匹配的正则表达式。

string:待匹配的字符串。

flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。具体参数为:

re.I:忽略大小写。

re.L:表示特殊字符集 w, W, , B, s, S 依赖于当前环境。

re.M:多行模式。

re.S:即 . ,并且包括换行符在内的任意字符(. 不包括换行符)。

re.U:表示特殊字符集 w, W, , B, d, D, s, S 依赖于 Unicode 字符属性数据库。

re.X:为了增加可读性,忽略空格和 # 后面的注释。

import re #从起始位置匹配 r1=re.match('abc','abcdefghi') print(r1) #不从起始位置匹配 r2=re.match('def','abcdefghi') print(r2)

运行结果:

其中,span表示匹配成功的整个子串的索引。

使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

group(num):匹配的整个表达式的字符串,group() 可以一次输入多个组号,这时它将返回一个包含那些组所对应值的元组。

groups():返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

import re s='This is a demo' r1=re.match(r'(.*) is (.*)',s) r2=re.match(r'(.*) is (.*?)',s) print(r1.group()) print(r1.group(1)) print(r1.group(2)) print(r1.groups()) print() print(r2.group()) print(r2.group(1)) print(r2.group(2)) print(r2.groups())

运行结果:

上述代码中的(.*)和(.*?)表示正则表达式的贪婪匹配与非贪婪匹配。

re.search函数

re.search函数扫描整个字符串并返回第一个成功的匹配,如果匹配成功则返回match对象,否则返回None。

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

pattern:匹配的正则表达式。

string:待匹配的字符串。

flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等等。

import re #从起始位置匹配 r1=re.search('abc','abcdefghi') print(r1) #不从起始位置匹配 r2=re.search('def','abcdefghi') print(r2)

运行结果:

使用group(num) 或 groups() 匹配对象函数来获取匹配表达式。

group(num=0):匹配的整个表达式的字符串,group() 可以一次输入多个组号,这时它将返回一个包含那些组所对应值的元组。

groups():返回一个包含所有小组字符串的元组,从 1 到 所含的小组号。

import re s='This is a demo' r1=re.search(r'(.*) is (.*)',s) r2=re.search(r'(.*) is (.*?)',s) print(r1.group()) print(r1.group(1)) print(r1.group(2)) print(r1.groups()) print() print(r2.group()) print(r2.group(1)) print(r2.group(2)) print(r2.groups())

运行结果:


从上面不难发现re.match与re.search的区别:re.match只匹配字符串的起始位置,只要起始位置不符合正则表达式就匹配失败,而re.search是匹配整个字符串,直到找到一个匹配为止。

re.compile 函数

compile 函数用于编译正则表达式,生成一个正则表达式对象,供 match() 和 search() 这两个函数使用。

re.compile(pattern[, flags])

pattern:一个字符串形式的正则表达式。

flags:可选,表示匹配模式,比如忽略大小写,多行模式等。

import re #匹配数字 r=re.compile(r'd+')  r1=r.match('This is a demo') r2=r.match('This is 111 and That is 222',0,27) r3=r.match('This is 111 and That is 222',8,27)   print(r1) print(r2) print(r3)

运行结果:

findall函数

搜索字符串,以列表形式返回正则表达式匹配的所有子串,如果没有找到匹配的,则返回空列表。

需要注意的是,match 和 search 是匹配一次,而findall 匹配所有。

findall(string[, pos[, endpos]])

string:待匹配的字符串。

pos:可选参数,指定字符串的起始位置,默认为0。

endpos:可选参数,指定字符串的结束位置,默认为字符串的长度。

import re #匹配数字 r=re.compile(r'd+')  r1=r.findall('This is a demo') r2=r.findall('This is 111 and That is 222',0,11) r3=r.findall('This is 111 and That is 222',0,27)   print(r1) print(r2) print(r3)

运行结果:

re.finditer函数

和 findall 类似,在字符串中找到正则表达式所匹配的所有子串,并把它们作为一个迭代器返回。

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

pattern:匹配的正则表达式。

string:待匹配的字符串。

flags:标志位,用于控制正则表达式的匹配方式,如是否区分大小写,多行匹配等。

import re  r=re.finditer(r'd+','This is 111 and That is 222') for i in r:   print (i.group())

运行结果:

re.split函数

将一个字符串按照正则表达式匹配的子串进行分割后,以列表形式返回。

re.split(pattern, string[, maxsplit=0, flags=0])

pattern:匹配的正则表达式。

string:待匹配的字符串。

maxsplit:分割次数,maxsplit=1分割一次,默认为0,不限次数。

flags:标志位,用于控制正则表达式的匹配方式,如:是否区分大小写,多行匹配等。

import re  r1=re.split('W+','This is 111 and That is 222')  r2=re.split('W+','This is 111 and That is 222',maxsplit=1)  r3=re.split('d+','This is 111 and That is 222')  r4=re.split('d+','This is 111 and That is 222',maxsplit=1)  print(r1) print(r2) print(r3) print(r4)

运行结果:

re.sub函数

re.sub函数用于替换字符串中的匹配项。

re.sub(pattern, repl, string, count=0, flags=0)

pattern:正则中的模式字符串。

repl:替换的字符串,也可为一个函数。

string:要被查找替换的原始字符串。

count:模式匹配后替换的最大次数,默认0表示替换所有的匹配。

import re  r='This is 111 and That is 222' # 删除字符串中的数字 r1=re.sub(r'd+','',r) print(r1) # 删除非数字的字符串  r2=re.sub(r'D','',r) print(r2)

运行结果:

到此这篇关于Python常用的正则表达式处理函数详解的文章就介绍到这了,希望大家以后多多支持!

⑨ python的正则表达式

1,正则表达式的一些内容

        正则表达式主要是用来匹配文本中需要查找的内容,例如在一片文章中找出电话号码,就中国的来说11位纯数字(不说座机),则使用"d{11}" 意味匹配数字11次,就能准确的查找出文本中的电话号码. 还有就是在编写网络爬虫的时候需要提取很多超链接再次进行爬取,使用正则表达式就很方便.直接匹配http开头就行,当然也可以使用beautifulsoup的select方法.

看下面的程序看看正则表达提取文本中的邮箱:


w 匹配字母,数字,下划线 

+ 匹配1次或者多次
re是正则表达式的工具包,工具包出错的话在anaconda的命令行输入"pip install re"安装,其他的工具包也是如此.

re.compile()中的r示意不是转义字符,也就是保持后面字符串原样,findall返回一个列表.下面还有一个版本的程序略有不同.


compile的另一个参数re.IGONORECASE(忽略大小写),还可以是re.DORALL,多行模式,具体功能也是模糊不清,不过在使用通配符 . 匹配的时候加上re.DOTALL参数能够匹配换行.如果希望忽略大小写和多行模式都开启可以使用re.compile(r'....',re.IGNORECASE|re.DOTALL) .

表达式使用( ),对匹配到的内容分为3组 也就是(w+)出现字母,数字,下划线一次或多次,这个分组就是下面使用match对象的grou()方法的时候的参数.不给参数和参数0都是得到整个匹配到的内容,  参数1得到第一个括号匹配到的内容,以此类推参数2和3,如果没有括号分组的话使用参数会出现错误.
search( )查找和正则式匹配的内容,只匹一次后面的那个找不到.返回一个match对象


w 匹配字母,数字,下划线

W 匹配字母,数字.下划线之外的所有字符

d 匹配数字

D 匹配非数字

s 匹配空格,制表符,换行符

S匹配除空格制表符,换行符之外的其他字符

[ .... ]定义自己的匹配,如[aeiouAEIOU ]匹配所有的元音字母,注意不是匹配单词.

{最少次数,最多次数},例如{3,9} 匹配3-9次,{ ,10}匹配0-10次. 默认为匹配最多次数(贪心匹配),非贪心模式在后面加上问号 


?  可选 0次或者1次吧  

+匹配1次或多次

*匹配0次或者多次

^ 判断开头 ^d 如果待匹配串是数字开头则返回第一个数字

$判断结尾  d$  如果待匹配串是数字结尾则返回最后一个数字

.   通配符,匹配除换行之外的所有字符

   d{11}  匹配数字11次

    . * 匹配所有字符除 换行

[a-zA-Z0-9._%+-]  小写和大写字母、数字、句点、下划线、百分号、加号或短横

[a-zA-Z]{2,4} 匹配字母 2 - 4次

阅读全文

与python正则尖括号相关的资料

热点内容
time库中的clock函数python 浏览:987
cad视觉移动命令怎么打开 浏览:819
安卓java调用python 浏览:395
java标准时间 浏览:137
华为服务器湖北渠道商云主机 浏览:30
韩式面部护理解压视频 浏览:301
pdf换成jpg图片 浏览:897
dh加密算法 浏览:107
安卓手机如何隐藏微信信息提示 浏览:632
nodejs解压缩 浏览:262
直流双转子压缩机 浏览:952
pythonxmlstring 浏览:822
用私钥加密之后可以用公钥解密 浏览:788
ug如何启动服务器 浏览:444
csgo防抖动命令 浏览:960
如何弄到手机app页面的源码 浏览:441
androidwindows7破解版 浏览:363
解压视频动画怎么拍 浏览:748
连涨启动源码 浏览:163
小奔运动app网络异常怎么回事 浏览:449