Regular expression
让我们来学习优雅强大的正则表达式吧!
一、re.match函数
re.match
尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,返回none。match()
方法一旦匹配成功,就是一个match object
对象,而match object
对象有以下方法:
- group() 返回被
re
匹配的字符串 - start() 返回匹配开始的位置
- end() 返回匹配结束的位置
- span()返回一个元组包含匹配 (开始,结束) 的位置
二、re.sub函数
re.sub(pattern, repl, string, count=0, flags=0)
是通过正则表达式来实现比普通字符串的replace更加强大的替换功能。详情可见
string="hello 111 world 111"
#我们可以通过
replac=string.replace("111","222")
#改成"hello 222 world 222"
#但如果我们要改的是"hello 123 world 456"
replac=string.replace("123","222")
replac=replac.replace("456","222")
#是不是很烦?用正则吧骚年!
#我们只要一行:
replac=re.sub("\d+","222",string)
来一道Hard感受一下正则的强大
思路
- 这道题正常做的话要用栈模拟,很遗憾,我不会
- 所以抄起正则表达式
class Solution:
def isValid(self, code: str) -> bool:
code=re.sub(r'<!\[CDATA\[.*?\]\]>|t','-',code)
prev=None
while code !=prev:
prev=code
code=re.sub(r'<([A-Z]{1,9})>[^<]*</\1>','t',code)
return code=='t'
#是的,你没有看错,结束力!
小Tip——关于在正则中对转义字符的处理
与大多数语言相同,比如markdown,正则表达式里用""作为转义字符,这就可能造成反斜杠困扰。假如需要匹配文字中的字符"",那么使用正则表达式则需要4个反斜杠"\":前两个和后两个分别用于在编程语言中转义成反斜杠,转换成两个反斜杠以后再在正则表达式里转义成一个反斜杠。
而Python中的原生字符串很好地解决了这个问题,有了原生字符串,妈妈再也不用担心我漏写反斜杠啦!,写出来的表达式也更加直观。
string="c:\\a\\b\\c"
ret=re.match(r"c:\\a",string).group()
print(ret)
# c:\a只要转义原字符串的"\"就行了
至于剩下的规则,留下网站和davechild_regular-expressions.pdf
就够了。
三、re.search()函数
与re.match()
很像,但是该函数是扫描整个字符串,而不是从头开始匹配。
四、re.findall()函数
扫描整个字符串,返回匹配数组。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程