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()函数

  扫描整个字符串,返回匹配数组。

posted @ 2022-05-25 22:35  Wasser007  阅读(22)  评论(0编辑  收藏  举报