循环浏览一些数据,我想捕获显示为页面ID的数字字符串(每行多于一行。)但是,我只想将数字字符串作为特定URL的一部分进行匹配,但我不想&#39 ; T想要记录URL,只记录数字。
URL是相对的,具有可变长度的数字字符串,格式为
/view/123456.htm
此处要返回的数据为' 123456'
我目前正在使用re.findall来识别正确的URL,然后使用re.sub来提取数字字符串。
views = re.findall(r"/view/\d*?.htm", line)
for view in views:
view = re.sub(r"/view/(\d+).htm", r"\1", view)
pagelist.append(view)
有没有办法做类似
的事情views = re.findall(r"/view/(\d*?).htm", r"\1", line) #I know this doesn't work
原始findall()只返回parens中匹配的部分?
答案 0 :(得分:4)
re.findall()只能返回parens中的正则表达式部分吗?
不仅可以, :
>>> import re
>>> re.findall(r"/view/(\d*?).htm", "/view/123.htm /view/456.htm")
['123', '456']
你没试过吗? The documentation也描述了它。
答案 1 :(得分:1)
你可以使用a lookbehind and a lookahead assertion使findall只返回数字。例如:
>>> re.findall(r"(?<=/view/)\d*?(?=\.htm)", "/view/123.htm /view/456.htm")
['123', '456']
这些断言可用于定义匹配前后的内容 - 不包括实际匹配。
更新:请检查Stefan Pochmann's answer,如果您只使用一个捕获组,findall()
将完全按照您的要求运行。