Python正则表达式 - 替换

Som*_*aul 1 python regex

我写了一个python代码:

import re

url = "www.google.com";
line = "../../asyouwish.html"

num = re.sub(r'(\.\.\/)*', url, line)
print ("Final : ", num)
Run Code Online (Sandbox Code Playgroud)

我的意图是用提供的url值替换../(任意次).但是我没有得到正确的输出.我想要的输出是"www.google.com/asyouwish.html".

我得到的是:

Final :  www.google.comawww.google.comswww.google.comywww.google.comowww.google.
comuwww.google.comwwww.google.comiwww.google.comswww.google.comhwww.google.com.w
ww.google.comhwww.google.comtwww.google.commwww.google.comlwww.google.com
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮助我,因为我出错!谢谢.

unu*_*tbu 5

*表示0次或更多次出现.+意味着1或更多.您希望匹配至少出现1次../.所以*改为+:

import re

url = "www.google.com/"
line = "../../asyouwish.html"

num = re.sub(r'([.]{2}/)+', url, line)
print ("Final : ", num)
Run Code Online (Sandbox Code Playgroud)

产量

('Final : ', 'www.google.com/asyouwish.html')
Run Code Online (Sandbox Code Playgroud)

由于re.sub将删除1或更多'../',因此您需要在之后添加正斜杠url.在上面,我已经为url自己添加了正斜杠.如果url没有正斜杠,你可以(作为替代方案)添加它

num = re.sub(r'([.]{2}/)+', url+'/', line)
Run Code Online (Sandbox Code Playgroud)

当您在0次或更多次匹配时匹配时,字符之间r'([.]{2}/)*'每个位置都与模式匹配,因此您可以在每个空格处进行替换.line

In [9]: x = 'www.google.comawww.google.comswww.google.comywww.google.comowww.google.comuwww.google.comwwww.google.comiwww.google.comswww.google.comhwww.google.com.www.google.comhwww.google.comtwww.google.commwww.google.comlwww.google.com'

In [13]: x.split('www.google.com')
Out[13]: ['', 'a', 's', 'y', 'o', 'u', 'w', 'i', 's', 'h', '.', 'h', 't', 'm', 'l', '']
Run Code Online (Sandbox Code Playgroud)