首页 > 编程知识 正文

pythoncompile函数(正则表达式语法大全)

时间:2023-05-05 16:36:57 阅读:79473 作者:3886

是使用单个字符串编写的计算机科学概念。 符合某个规则的字符串经常用于搜索,表示特定模式的文本

正则的写法

.(点编号) :任意字符。 (n ) ) )大括号) )以外,与括号内列举的范围一致。 例如,(0-9)表示任意单一字符数,(a-z )表示任意单一(d )数字以外均可) s )表空间、制表符键(s )空格、制表符键以外) w )单词字符、a-z、a-z、表面前的内容出现1次或0次{m,n } :从m次出现n次^ :一致字符串的开头$ :一致字符串的末尾() :从第一个括号开始对正则表达式的内容进行分组(a :从一致字符串开始) )。 z :匹配字符串末尾| :左右任一个

使用大致步骤

使用compile将表示正则表达式的字符串编译为一个pattern对象,使用pattern对象提供的方法匹配文本,然后获取匹配结果

必须从第一个字符开始匹配。 否则,匹配失败只返回一个结果,支持分组导入re

text='1234aash34235235fdosdf '

p=re.compile('[0-9]* ' )

result=p.match (文本)

是打印(result )

打印(result.group ) )

打印(result.span ) )

''''

re.Match object; span=(0,4 ),match='1234 '

输出结果

1234

(0,4 ) )。

返回到“”结构re.Match

span :匹配跨度,从哪里匹配并在哪里结束,左包含右不包含组:表示匹配组,只有一组的话直接打印内容start :显示开始匹配的字符串的位置end :表示匹配结束的字符串的位置GGP

text='1234aash34235235fdosdf '

p=re.compile((([0-9]* ) ) ) )这里多了一个括号

result=p.match (文本)

是打印(result )

打印(result.group ) )

打印(result.groups ) )

打印(result.span ) )

''''

re.Match object; span=(0,4 ),match='1234 '

1234

(1234 )、) )。

(0,4 ) )。

“”搜索匹配

基本上与match匹配,并且只返回一个结果,但是可以从开头位置匹配处返回一个结果,并且支持组组导入re

text='a1234aash34235235fdosdf '

p=re.compile('[0-9] ' )

result=p.search (文本)

是打印(result )

打印(result.group ) )

''''

re.Match object; span=(1,5 ),match='1234 '

1234

“”查找所有匹配项

所有匹配的结果不支持组组,默认情况下返回列表import re

text='a1234aash34235235fdosdf '

p=re.compile('[0-9] ' )

result=p.find all (文本) )。

是打印(result )

''''

['1234、34235235']

“”查找器匹配

缺省情况下,所有匹配的结果都将返回重复re.Match的迭代,并且可以在for循环中检索re.Match以支持组组导入re

text='a1234aash34235235fdosdf '

p=re.compile('[0-9] ' )

result=p.finditer(text )

是打印(result )

for r in result:

打印(r )是

打印(r.group ) )

''''

callable _ iteratorobjectat0x 7f 26614 d 0210

re.Match object; span=(1,5 ),match='1234 '

1234

re.Match object; span=(9,17 ),match='34235235 '

34235235

替换“”sub

能够将匹配字符替换为sub的sub是批量替换,并且可以替换多个位置import re

text='a1234aash34235235fdosdf '

p=re.compile('[0-9] ' )

将result=p.sub('0',text )结果全部替换为0

是打印(result )

''''

a0aash0fdosdf

' ' '

常用匹配方法

ps的区别group与groups都属于re.Match的内置属性group用于直接显示匹配结果,而groups用于提取匹配结果中的值以提取百度网页title为例import re import requests url = 'https://www.baidu.com' headers = { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36' } response = requests.get(url, headers=headers) html = response.text p = re.compile('<title>(.*?)</title>') # 提取title中间的值 result = p.search(html) print(result.group()) print(result.groups()) """ <title>百度一下,你就知道</title> ('百度一下,你就知道',) """可以看出,group直接把整个匹配的结果都提取出来了groups只提取了匹配值中括号的部分,并且需要搭配()括号使用并且group的结果是一个字符串,而groups的结果是一个tuple如果存在多个组的时候,两个结果更不相同import re text = '2020-04-05' p = re.compile('([0-9]{4})-([0-9]{2})') # 这里分了两个组,一组提取年份,一组提取月份 result = p.search(text) print(result) print(result.group()) # 打印匹配值 print(result.groups()) # 打印匹配结果,返回一个tuple print(result.group(0)) # 打印所有组,和group()一样 print(result.group(1)) # 打印第一组的匹配值 print(result.group(2)) # 打印第二组的匹配值 print(result.groups(0)) # 打印所有匹配结果,和groups一样的可以看出,group和groups里面是否加零结果都是一样的,即返回所有组group可以指定返回第几组的值,相对来说更好筛选groups直接返回匹配的所有值根据这里特性,我们可以重新使用group对上面的百度标题进行爬取import re import requests url = 'https://www.baidu.com' headers = { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36' } response = requests.get(url, headers=headers) html = response.text p = re.compile('<title>(.*?)</title>') # 提取title中间的值 result = p.search(html) print(result.group()) print(result.group(1)) # 把第1组的结果打印出来 print(result.groups()) """ <title>百度一下,你就知道</title> 百度一下,你就知道 ('百度一下,你就知道',) """

正则表达式修饰符

re.I演示

假设想要匹配所有字母,不区分大小写

import re text1 = 'shdfi1234SHDFISHDI' p = re.compile('[a-z]+', re.I) # 不区分大小写,所有字母都匹配 result = p.findall(text1) print(result) """ ['shdfi', 'SHDFISHDI'] """

re.M演示

假设匹配以sh开头以2结尾的字符串import re text1 = 'sh22dfi12n34SHDFIssSHDI' p = re.compile('^sh.*2#39;, re.M) # 匹配多行,即忽略回车匹配所有小写字母 p2 = re.compile('^sh.*2#39;) result = p.findall(text1) result2 = p2.findall(text1) print(result) print(result2) """ ['sh22dfi12'] [] """可以看出,在多行模式下,一个字符串根据回车符号被拆分成两行,即有两个开头与结尾。

re.S演示

假设匹配一个d..I的字符串import re text1 = 'sh22dfi12n34SHDFIssSHDI' p1 = re.compile('d.*I') p2 = re.compile('d.*I', re.S) # 让点号也能匹配换行符 result1 = p1.search(text1) result2 = p2.search(text1) print(result1) # 目前没有匹配上 print(result2.group()) # 从下面的结果来看换行符也被匹配上了 """ None dfi12 34SHDFIssSHDI """

匹配中文

匹配中文[u4e00-u9fa5],不包括全角标点

贪婪匹配与非贪婪匹配

. *和.*?

import re text = '12ddd345' # 匹配一个数字开头数字结尾的字符串 p1 = re.compile('[0-9].*[0-9]') # 贪婪模式 p2 = re.compile('[0-9].*?[0-9]') # 非贪婪模式 result1 = p1.search(text) result2 = p2.search(text) print(result1.group()) print(result2.group()) """ 12ddd345 12 """正则表达式默认使用贪婪匹配import re text = u'123你好bbabd' p1 = re.compile(u'[u4e00-u9fa5]{1,2}') # 匹配一个或者两个中文 result1 = p1.search(text) print(result1.group()) # 打印结果是匹配两个 """ 你好 """如果使用非贪婪匹配import re text = u'123你好bbabd' p1 = re.compile(u'[u4e00-u9fa5].*?') # 匹配一个或者两个中文 result1 = p1.search(text) print(result1.group()) # 打印结果是匹配一个 """ 你 """

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。