正则用的机会不多,就爬虫的时候,我会用一下,这次需要替换一个url内部的数字。
一般以前我用的比较多的都是查找。这次需要用到替换指定的内容,哭瞎了我!
参考连接:
https://docs.python.org/zh-cn/3/library/re.html
https://stackoverflow.com/questions/5984633/python-re-sub-group-number-after-number
re.sub(pattern, repl, string, count=0, flags=0)
pattern在没有进行任何设置的情况下会被后面repl全部替换。
所以,你可以在pattern通过()进行分组,然后通过 umber的方式,选择需要保留的组.
api_url = re.sub(template, r'g<1>{}g<3>'.format(self.twitter_user_id), api_url)
这是是我本来需要替换的组,如果直接用1的话,后面明显跟的是数字,那这个xxxxx的组明显就是一个不符合实际的情况。
所以可以用过g<number>的方式来选择保留组
In [4]: template = re.compile(r"(?P<First>timeline/profile/)(d*)(?P<Second>.js ...: on)") In [5]: template.sub(r'g<Second>8888g<First>', url)
当然通过设置组名的方式来选取也是一种非常不错的选择。
re真的是非常强大,只掌握一些简单的使用,真的不够,只能慢慢积累。
转义特殊字符(允许你匹配 '*'
, '?'
, 或者此类其他),或者表示一个特殊序列;特殊序列之后进行讨论。
如果你没有使用原始字符串( r'raw'
)来表达样式,要牢记Python也使用反斜杠作为转义序列;如果转义序列不被Python的分析器识别,反斜杠和字符才能出现在字符串中。如果Python可以识别这个序列,那么反斜杠就应该重复两次。这将导致理解障碍,所以高度推荐,就算是最简单的表达式,也要使用原始字符串。
上面的这个反斜杠又给我上了一课,在Python使用re中,务必在前面加上r,这样就可以避免Python字符串转义的过程,这个反斜杠就可以直接拿来被re所使用。举一个简单的示例吧,真的非常拗口
In [21]: s Out[21]: '\' In [22]: print(s) In [23]: s Out[23]: '\' In [24]: re.sub('\\','a',s) Out[24]: 'a' In [25]: re.sub(r'\','a',s) Out[25]: 'a' In [26]:
对于Python的字符串来说,这个反斜杠的标志服是一个特殊的符号,对于re来说,同样是一个特殊的符号,所以,如果没有使用r,如果你向在re里面使用反斜杠,你就需要写两个\,所以四个也就是\\可以匹配到一个字符反斜杠,真他妈累死了。