学习正则表达式

本文深入探讨了正则表达式的使用方法,包括创建字符集、闭包操作符的运用、从字符串开头或结尾匹配、在单词边界上的匹配、使用findall()查找所有匹配、用sub()进行搜索和替换、以及用split()进行分割等实用技巧。

今天学习的内容,贴在这里,用作参考。

import re

#15.3.8 创建字符合集([])
patt = "\w+@(\w+\.)?\w+\.com"   #\.是对句点转义,转义后,就是正常的句点,而非正则表达式的匹配符号。
#这个复杂的pattern可以匹配两种类型的邮箱。
a = re.match(patt, "nobody@xxx.com").group()
print(a)
#运行结果:nobody@xxx.com
b = re.match(patt, "nobody@www.xxx.com").group()
print(b)
#运行结果:nobody@www.xxx.com
#一个简单电子邮件的正则表达式('\w+@\w+.com")
# \w相当于[A-Za-z0-9_]

#闭包操作符(*,+,?,{})实现多次出现/重复匹配
#"*"匹配前一个字符0次或无限次。abc* 可匹配 ab 或者 abcccc。
#"+"匹配前一个字符1次或无限次。abc+ 可匹配 abc 或者 abcccc。
#"?"匹配前一个字符0次或1次。 abc? 可匹配ab 或则 abc。
#{m}匹配前一个字符m次。ab{2}c

p = "a(123|456)c"
q = re.match(p, 'a456c').group()
print(q)
# 用圆括号()来创建分组,后可跟上面提到的闭包操作符,来重复子组重复的次数。
# eg. (abc){2} 即重复匹配(abc)两次,即要匹配abcabc

c = re.match("\w\w\w-\d\d\d", "abc-123").group()
print(c)
#运行结果: abc-123
# "\w" == [A-Za-z0-9_]; "\d"== [0-9]

# d = re.match('\w\w\w-\d\d\d', 'abc-xyz').group()
# print(d)
#运行结果: AttributeError: 'NoneType' object has no attribute 'group'

e = re.match("(\w\w\w)-(\d\d\d)", "abc-123")
print(e.group())
#运行结果: abc-123
print(e.group(1))
#运行结果:abc
print(e.group(2))
#运行结果:123
print(e.groups())
#运行结果为元组:('abc', '123')

f = re.match("ab", 'ab') #无子组
print(f.group())  #完全匹配
#运行结果:ab
print(f.groups())  #所有匹配的子组
#运行结果:()

g = re.match('(ab)', "ab") #一个子组 是只括号里的
print(g.group()) #匹配所有子组得到的结果
#运行结果:ab
print(g.group(1))   #匹配子组1
#运行结果:ab
print(g.groups())  #所有匹配的子组
#运行结果:('ab')

i = re.match('(a)(b)', "abc") #两个子组
print(i.group()) #匹配所有子组得到的结果
#运行结果:ab
print(i.group(1))  #匹配子组1
#运行结果:a
print(i.group(2))  #匹配子组2
#运行结果: b
print(i.groups())  #所有匹配的子组
#运行结果:('a', 'b')

j = re.match("(a(b))", 'ab') #两个子组
print(j.group())
#结果:ab
print(j.group(1)) #匹配第一个子组
#结果:ab
print(j.group(2)) #匹配第二个子组
#结果:b
print(j.groups()) #所有匹配的子组
#结果:("ab","b")

#15.3.10 从字符串的开头或结尾匹配及在单词边界上的匹配
#下面的列子展示了锚点性正则表达式的操作符。
#这些操作符不是用来匹配,而是用来搜索的。
#因为match总是从第一个字符串开始匹配。

k = re.search('^The', "The end.") #^从首个字符开始匹配
print(k.group())
#运行结果: The
# l = re.search('^The',"end. The")  # 首个字母不匹配
# print(l.group())
#运行结果:
# AttributeError: 'NoneType' object has no attribute 'group'

#字符串前面加了r,是raw的意思,它表示对字符串不进行转义,
# 不理会任何转义字符串,如"\n"等
o = re.search(r'\bthe', "bite the dog")  #在词边界
print(o.group())
# \b在正则表达式中表示单词的开头或结尾,空格、标点、换行都算是单词的分割。
# 而\b自身又不会匹配任何字符,它代表的只是一个位置。

# p = re.search(r'\bthe', "bitethedog")  要找以the 开头的单词,找不到与匹配条件相符的字符串。
# print(p.group())
# 运行结果:AttributeError: 'NoneType' object has no attribute 'group'

# p = re.search(r'/bthe', "bitethe dog") 找不到的原因同上
# print(p.group())
#运行结果:AttributeError: 'NoneType' object has no attribute 'group'

p = re.search(r'\Bthe', "bitethe dog")  # \B表示不是单词开头和结尾的位置
print(p.group())
#运行结果:the

q = re.search(r'\Be', "bitethe dog")  # \B表示不是单词开头和结尾的位置
print(q.group())

# 15.3.11 用findall()找到每个出现的匹配部分
r = re.findall('cars', 'car')
print(r)
#运行结果: ['car']
#findall总会返回一个列表,不需要用.group().
# 如果findall()没有找到匹配的部分,则会返回空列表 []
r1 = re.findall('(ca(r))', 'car')
print(r1)
# 运行结果:[('car', 'r')]
#如果成功匹配,则会返回所有匹配部分的列表(按从左往右的顺序)

# 15.3.12 用sub()(和subn())进行搜索和替换
a = re.sub("X", "Mr. Smith", 'attn: X\n\nDear X, \n')
print(a)

text = "JGood is a handsome boy, he is cool, clever."
print(re.sub(r'\s+', '-', text))
#运行结果:JGood-is-a-handsome-boy,-he-is-cool,-clever.
# re.sub的函数原型为:re.sub(pattern, repl, string, count)

b = re.sub('[ae]', "X", "abcde")
print(b)
#运行结果: XbcdX

c = re.subn(r'abc|d', "X", "abcde")
print(c)
#运行结果: ('XXe', 2)
# subn()和sub()一样,但它还返回一个表示替换次数的数字,
# 替换后的字符串和替换次数作为一个元组的元素返回。


#15.3.13 用split()分割(分隔模式)
#re.slipt(pattern,text,maxsplit)将文本以pattern为标准分割为一个列表。

m = re.split("\d+", "123abc321cba")  #不保留匹配项
print(m)
#运行结果:['', 'abc', 'cba']

n = re.split('(\d+)',"123abc321cba")  #保留匹配项
print(n)
#运行结果:['', '123', 'abc', '321', 'cba']

o = re.split('\W+', "Words, word, word") #\W 以非单词字符作为分隔模式。
print(o)
#运行结果: ['Words', 'word', 'word']

p = re.split("a", "bbb")
print(p)
#运行结果:['bbb']
#如果文本不能被分隔,则将以列表方式返回整个文本。


#f = re.match('\bblow', 'blow')
#print(f.group())
#运行结果:AttributeError: 'NoneType' object has no attribute 'group'
#没有找到匹配对象
#因为ASCII字符和正则表达式的特殊符号间有冲突,\b在ASCII中表示退格键。
#但在正则表达式中\b 表示单词的边界。
#为了表示正则表达式的边界\b需要写成 \\b. 用\对\b进行转义。
f = re.match('\\bblow', 'blow')
print(f.group())
#不过更推荐的方法是该用原始字符串
#(r'\bblow', 'blow')
【语音分离】基于平均谐波结构建模的无监督单声道音乐声源分离(Matlab代码实现)内容概要:本文介绍了基于平均谐波结构建模的无监督单声道音乐声源分离方法,并提供了相应的Matlab代码实现。该方法通过对音乐信号中的谐波结构进行建模,利用音源间的频率特征差异,实现对混合音频中不同乐器或人声成分的有效分离。整个过程无需标注数据,属于无监督学习范畴,适用于单通道录音场景下的语音与音乐分离任务。文中强调了算法的可复现性,并附带完整的仿真资源链接,便于读者学习与验证。; 适合人群:具备一定信号处理基础和Matlab编程能力的高校学生、科研人员及从事音频处理、语音识别等相关领域的工程师;尤其适合希望深入理解声源分离原理并进行算法仿真实践的研究者。; 使用场景及目标:①用于音乐音频中人声与伴奏的分离,或不同乐器之间的分离;②支持无监督条件下的语音处理研究,推动盲源分离技术的发展;③作为学术论文复现、课程项目开发或科研原型验证的技术参考。; 阅读建议:建议读者结合提供的Matlab代码与网盘资料同步运行调试,重点关注谐波建模与频谱分解的实现细节,同时可扩展学习盲源分离中的其他方法如独立成分分析(ICA)或非负矩阵分解(NMF),以加深对音频信号分离机制的理解。
内容概要:本文系统介绍了新能源汽车领域智能底盘技术的发展背景、演进历程、核心技术架构及创新形态。文章指出智能底盘作为智能汽车的核心执行层,通过线控化(X-By-Wire)和域控化实现驱动、制动、转向、悬架的精准主动控制,支撑高阶智能驾驶落地。技术发展历经机械、机电混合到智能三个阶段,当前以线控转向、线控制动、域控制器等为核心,并辅以传感器、车规级芯片、功能安全等配套技术。文中还重点探讨了“智能滑板底盘”这一创新形态,强调其高度集成化、模块化优势及其在成本、灵活性、空间利用等方面的潜力。最后通过“2025智能底盘先锋计划”的实车测试案例,展示了智能底盘在真实场景中的安全与性能表现,推动技术从研发走向市场验证。; 适合人群:汽车电子工程师、智能汽车研发人员、新能源汽车领域技术人员及对智能底盘技术感兴趣的从业者;具备一定汽车工程或控制系统基础知识的专业人士。; 使用场景及目标:①深入了解智能底盘的技术演进路径与系统架构;②掌握线控技术、域控制器、滑板底盘等关键技术原理与应用场景;③为智能汽车底盘研发、系统集成与技术创新提供理论支持与实践参考。; 阅读建议:建议结合实际车型和技术标准进行延伸学习,关注政策导向与行业测试动态,注重理论与实车验证相结合,全面理解智能底盘从技术构想到商业化落地的全过程。
【顶级EI复现】计及连锁故障传播路径的电力系统 N-k 多阶段双层优化及故障场景筛选模型(Matlab代码实现)内容概要:本文介绍了名为《【顶级EI复现】计及连锁故障传播路径的电力系统 N-k 多阶段双层优化及故障场景筛选模型(Matlab代码实现)》的技术资源,重点围绕电力系统中连锁故障的传播路径展开研究,提出了一种N-k多阶段双层优化模型,并结合故障场景筛选方法,用于提升电力系统在复杂故障条件下的安全性与鲁棒性。该模型通过Matlab代码实现,具备较强的工程应用价值和学术参考意义,适用于电力系统风险评估、脆弱性分析及预防控制策略设计等场景。文中还列举了大量相关的科研技术支持方向,涵盖智能优化算法、机器学习、路径规划、信号处理、电力系统管理等多个领域,展示了广泛的仿真与复现能力。; 适合人群:具备电力系统、自动化、电气工程等相关背景,熟悉Matlab编程,有一定科研基础的研究生、高校教师及工程技术人员。; 使用场景及目标:①用于电力系统连锁故障建模与风险评估研究;②支撑高水平论文(如EI/SCI)的模型复现与算法验证;③为电网安全分析、故障传播防控提供优化决策工具;④结合YALMIP等工具进行数学规划求解,提升科研效率。; 阅读建议:建议读者结合提供的网盘资源,下载完整代码与案例进行实践操作,重点关注双层优化结构与场景筛选逻辑的设计思路,同时可参考文档中提及的其他复现案例拓展研究视野。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值