使用python re查找url';包含x的s

使用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" 使用此工具: 我

我使用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\/"$/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
,因为没有行插入符号它就没有意义。