作用:compile 函数用于编译正则表达式,生成一个正则表达式( Pattern )对象,供 match() 和 search() 这两个函数使用。
phone='''
weref234
16888888888
as13423423
weq
435435
15812312312e
afa15812312316
13111111111
'''
pattern=re.compile(r'1[3-9]\d{9}') #todo 编译正则表达式之后得到一个编译对象
result=pattern.search(phone) #todo search只会返回第一个匹配的结果,如果没有匹配成功返回None
print(result) #todo <re.Match object; span=(10, 21), match='15812312312'>
打印结果:
<re.Match object; span=(10, 21), match=‘16888888888’>
16888888888
(10, 21)
result.group():返回第一个匹配结果
result.span():返回第一个匹配结果的下标,为什么是(10,21)呐?
weref234:从0开始,4结束后还包含了换行符’/n’2个字符,所以从10开始,不包含21,前闭后开的原则
2、result=pattern.search(phone):search匹配成功返回的是Match对象;search只会返回第一个匹配的结果,如果没有匹配成功则返回None
phone='''
weref234
16888888888
as13423423
weq
435435
15812312312e
afa15812312316
13111111111
'''
pattern=re.compile(r'1[3-9]\d{9}') #todo 编译正则表达式之后得到一个编译对象
result2=pattern.match(phone)
print(result2)
打印结果为None,因为第一个字符为w开头,所以匹配不到
phone1="17812312345aaa"
pattern=re.compile(r'1[3-9]\d{9}') #todo 编译正则表达式之后得到一个编译对象
result2=pattern.match(phone1) #todo match函数是从第一个字符开始匹配(从w开始匹配),如果第一个字符不匹配,则返回None
print(result2)
print(result2.group()) #todo 返回第一个匹配结果
print(result2.span()) #todo 返回第一个匹配结果的下标
打印结果:
<re.Match object; span=(0, 11), match=‘17812312345’>
17812312345
(0, 11)
.:匹配任意单个字符(不包括换行符)
[]:匹配字符集,区间中的集合,可匹配其中任意一个字符
\d:匹配数字,即0-9,可以表示为[0-9]、
\s:匹配空白字符,即空格
\S:匹配非空白字符,
\w:匹配单词字符,即a-z、A-Z、0-9、_
\W:匹配非单词字符
import re
#.匹配任意单个字符(不包括换行符)
one='123a'
res=re.match('.',one)
print(res.group())
#[]:匹配字符集,区间中的集合,可匹配其中任意一个字符
two='8'
res1=re.match('[0-9]',two) #匹配1-9之间的数字
print(res1.group())
res2=re.match('[0,1,8,9]',two) #匹配0、1、8、9之间的数字
print(res2.group())
two_2='Hello Python'
print(re.match('[hH]',two_2).group()) #匹配小写或大写H
#\d:匹配数字,即0-9,可以表示为[0-9]
three='天空1号发射成功'
print(re.match('天空\d',three).group())
print(re.search('\d',three).group())
欢迎加入Python学习交流群:748989764
*:匹配前一个字符出现0次或者无限次,即可有可无
+:匹配前一个字符出现1次或者无限次,即至少有1次
?:匹配前一个字符出现1次或者0次,即要么有1次,要么没有
{m}:匹配前一个字符出现m次
{m,}:匹配前一个字符至少出现m次
{m,n}:匹配前一个字符出现从m到n次
print(re.match('[A-Z][a-z]*','Mn').group())
print(re.match('[A-Z][a-z]*','Msdfsg').group())
print(re.match('[A-Z][a-z][a-z]','Msdfs').group())
Mn
Msdfsg
Msd
print(re.match(r'[a-zA-Z_]+[\w]*','name1').group())
print(re.match(r'[a-zA-Z_]+[\w]*','_name1').group())
print(re.match(r'[a-zA-Z_]+[\w]*','2_name1'))
name1
_name1
None
print(re.match('[0-9]?[0-9]','88').group())
print(re.match('[0-9]?[0-9]','8').group())
print(re.match('[0-9]?[0-9]','08').group())
print(re.match('[0-9]?[0-9]','888').group())
88
8
08
88
print(re.match('[a-zA-Z0-9_]{8,20}','12345678').group())
print(re.match('[a-zA-Z0-9_]{8}','12345678').group())
12345678
12345678
^:表示以什么开头
$:表示以什么结尾
\b:表示匹配单词的边界
|:或者
emails='''
awhaldc@163.com
asdasdfddasdfascvdfgbdfgdsds@163.com
afa_@163.com
awhaldc666@163.comax
q112dsdasdas@163.com
aaaa_____@qq.com
aaaa____@qq.com
'''
print(re.search('^[a-zA-Z][\w]{5,17}@163\.com$',emails,re.MULTILINE).group())
q112dsdasdas@163.com
print(re.search(r'.*\bbeijing\b','I Love beijing too'))
print(re.search(r'.*\bbeijing\b','I Love beijing1 too'))
print(re.search(r'.*beijing','I Love beijing too'))
I Love beijing
None
I Love beijing
re.findall(pattern,string)
import re
emails='''
awhaldc@163.com
asdasdfddasdfascvdfgbdfgdsds@163.com
afa_@163.com
112dsdasdas@163.com
aaaa_____@126.com
aaaa____@163.com
'''
#findall:pattern在string里所有的非重复匹配,返回一个迭代器iterator保存了匹配对象
list=re.findall(r'(^[a-zA-Z][\w]{5,17}@(163|126).com$)',emails,re.MULTILINE)
print(list)
for email in list:
print(email[0])
[(‘awhaldc@163.com’, ‘163’), (‘aaaa_____@126.com’, ‘126’), (‘aaaa____@163.com’, ‘163’)]
awhaldc@163.com
aaaa_____@126.com
aaaa____@163.com
def add(result): #result是一个匹配对象
str_num=result.group()
num=int(str_num)+1
return str(num)
print(re.sub(r'\d+',add,'a=111'))
a=112
line='hello,world,china.'
print(re.split(r'\W+',line))
[‘hello’, ‘world’, ‘china’, ‘’]
print(re.split(r':| ','info:kobe 18 beijing'))
[‘info’, ‘kobe’, ‘18’, ‘beijing’]
什么是贪婪模式?
python里数量词默认是贪婪的,总是尝试匹配尽可能多的字符
什么是非贪婪模式?
与贪婪模式相反,总是尝试匹配尽可能少的字符,可以使用、?、+、{m,n}加上?,使贪婪模式变为非贪婪模式*
line2='this is my phone:188-1111-6666'
#非贪婪模式,需求:把电话和电话的描述信息尽可能的分开,只能用正则表达式
result=re.match(r'(.+?)(\d+-\d+-\d+)',line2)
print(result.group(1))
print(result.group(2))
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。
在我的应用程序中,我需要能够找到所有数字子字符串,然后扫描每个子字符串,找到第一个匹配范围(例如5到15之间)的子字符串,并将该实例替换为另一个字符串“X”。我的测试字符串s="1foo100bar10gee1"我的初始模式是1个或多个数字的任何字符串,例如,re=Regexp.new(/\d+/)matches=s.scan(re)给出["1","100","10","1"]如果我想用“X”替换第N个匹配项,并且只替换第N个匹配项,我该怎么做?例如,如果我想替换第三个匹配项“10”(匹配项[2]),我不能只说s[matches[2]]="X"因为它做了两次替换“1fooX0barXg
这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。
什么是ruby的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht
无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD
华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o
我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的
本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决
在VMware16.2.4安装Ubuntu一、安装VMware1.打开VMwareWorkstationPro官网,点击即可进入。2.进入后向下滑动找到Workstation16ProforWindows,点击立即下载。3.下载完成,文件大小615MB,如下图:4.鼠标右击,以管理员身份运行。5.点击下一步6.勾选条款,点击下一步7.先勾选,再点击下一步8.去掉勾选,点击下一步9.点击下一步10.点击安装11.点击许可证12.在百度上搜索VM16许可证,复制填入,然后点击输入即可,亲测有效。13.点击完成14.重启系统,点击是15.双击VMwareWorkstationPro图标,进入虚拟机主
@raw_array[i]=~/[\W]/非常简单的正则表达式。当我用一些非拉丁字母(具体来说是俄语)尝试时,条件是错误的。我能用它做什么? 最佳答案 @raw_array[i]=~/[\p{L}]/使用西里尔字符进行测试。引用:http://www.regular-expressions.info/unicode.html#prop 关于ruby-正则表达式将非英文字母匹配为非单词字符,我们在StackOverflow上找到一个类似的问题: https://