使用python re查找url';包含x的s
我使用python 2.7.3、urllib和re查找包含以下内容的URL:使用python re查找url';包含x的s,python,regex,python-2.7,Python,Regex,Python 2.7,我使用python 2.7.3、urllib和re查找包含以下内容的URL: href="/dirone/Dir_Two/dirthree/" url可能位于的位置,例如: href="/dirone/Dir_Two/dirthree/5678-random-stuff-here-letters-and-numbers" 我想回来: "/dirone/Dir_Two/dirthree/5678-random-stuff-here-letters-and-numbers" 使用此工具: 我
href="/dirone/Dir_Two/dirthree/"
url可能位于的位置,例如:
href="/dirone/Dir_Two/dirthree/5678-random-stuff-here-letters-and-numbers"
我想回来:
"/dirone/Dir_Two/dirthree/5678-random-stuff-here-letters-and-numbers"
使用此工具:
我将正则表达式生成为:
/^href\="\/dirone\/Dir_Two\/dirthree\/"$/im
因此,该正则表达式是否可以通过以下方式与python和re一起使用:
object_name = re.findall('/^href\="\/dirone\/Dir_Two\/dirthree\/"$/im',url)
for single_url in object_name:
do something
你真的想放下
^
锚;我怀疑href
是否会出现在行首
您不需要/im
部分,这些部分应替换为re.
标志常量。这里有Perl正则表达式语法,Python没有专门的/…/flags
语法
因此,转义太多,并且没有实际的Python字符串。实际上,这里不包括字母和数字部分的5678随机数据
改用这个:
object_name = re.findall(r'href="(/dirone/Dir_Two\/dirthree/[^"/]*)"', url, re.I)
我删除了多行标志,因为删除了^
的字符串的开头不再匹配。我在路径周围添加了一个组((…)
),以便findall()
返回这些,而不是全部匹配。[^”/]*
部分匹配除引号或斜杠以外的任何字符,以捕获文件名部分,而不是另一个目录名
简短演示:
>>> import re
>>> example = '<a href="/dirone/Dir_Two/dirthree/5678-random-stuff-here-letters-and-numbers">'
>>> re.findall(r'href="(/dirone/Dir_Two\/dirthree/[^"/]*)"', example, re.I)
['/dirone/Dir_Two/dirthree/5678-random-stuff-here-letters-and-numbers']
>>重新导入
>>>示例=“”
>>>re.findall(r'href=“(/dirone/Dir_Two\/dirthree/[^”/]*)”,例如,re.I)
['/dirone/Dir_Two/dirthree/5678随机填充字母和数字']
你真的想放弃^
锚;我怀疑href
是否会出现在行首
您不需要/im
部分,这些部分应替换为re.
标志常量。这里有Perl正则表达式语法,Python没有专门的/…/flags
语法
因此,转义太多,并且没有实际的Python字符串。实际上,这里不包括字母和数字部分的5678随机数据
改用这个:
object_name = re.findall(r'href="(/dirone/Dir_Two\/dirthree/[^"/]*)"', url, re.I)
我删除了多行标志,因为删除了^
的字符串的开头不再匹配。我在路径周围添加了一个组((…)
),以便findall()
返回这些,而不是全部匹配。[^”/]*
部分匹配除引号或斜杠以外的任何字符,以捕获文件名部分,而不是另一个目录名
简短演示:
>>> import re
>>> example = '<a href="/dirone/Dir_Two/dirthree/5678-random-stuff-here-letters-and-numbers">'
>>> re.findall(r'href="(/dirone/Dir_Two\/dirthree/[^"/]*)"', example, re.I)
['/dirone/Dir_Two/dirthree/5678-random-stuff-here-letters-and-numbers']
>>重新导入
>>>示例=“”
>>>re.findall(r'href=“(/dirone/Dir_Two\/dirthree/[^”/]*)”,例如,re.I)
['/dirone/Dir_Two/dirthree/5678随机填充字母和数字']
与Martijn的答案类似,但使用beautifulsoup
假设您拥有HTML
data = '<a href="/dirone/Dir_Two/dirthree/5678-random-stuff-here-letters-and-numbers">Content</a>'
from bs4 import BeautifulSoup
import re
soup = BeautifulSoup(data)
print [el['href'] for el in soup('a', href=re.compile('^/dirone/Dir_Two/.*'))]
data=''
从bs4导入BeautifulSoup
进口稀土
汤=美汤(数据)
为汤中的el打印[el['href'](a',href=re.compile('^/dirone/Dir_Two/*')]
与Martijn的答案类似,但使用beautifulsoup
假设您拥有HTML
data = '<a href="/dirone/Dir_Two/dirthree/5678-random-stuff-here-letters-and-numbers">Content</a>'
from bs4 import BeautifulSoup
import re
soup = BeautifulSoup(data)
print [el['href'] for el in soup('a', href=re.compile('^/dirone/Dir_Two/.*'))]
data=''
从bs4导入BeautifulSoup
进口稀土
汤=美汤(数据)
为汤中的el打印[el['href'](a',href=re.compile('^/dirone/Dir_Two/*')]
我相信你的意思是re.M | re.I
@Bogdan:我做了,但后来删除了re.M
,因为没有行插入符号它就没有意义。我相信你的意思是re.M | re.I
@Bogdan:我做了,但后来删除了re.M
,因为没有行插入符号它就没有意义。