正则re.sub替换指定内容(被坑4个小时)。
正则用的机会不多,就爬虫的时候,我会用一下,这次需要替换一个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通过()进行分组,然后通过\number的方式,选择需要保留的组.
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>8888\g<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里面使用反斜杠\,你就需要写两个\\,所以四个\也就是\\\\可以匹配到一个字符反斜杠,真他妈累死了。
浙公网安备 33010602011771号