link = "http://blog.test.com/54321&sa=U&ei=1sTFVJLfOtOC8gW0jIHYCw&ved=0CBMQFjAA"
pat = re.compile("(.*)\&(.*)")
match = re.search(pat,link)
print match.group(1)
结果为http://blog.test.com/54321&sa=U&ei=1sTFVJLfOtOC8gW0jIHYCw
但我需要的是http://blog.test.com/54321
如何匹配我想要的结果?
请指导我,谢谢
答案 0 :(得分:5)
不使用Regex。
link = "http://blog.test.com/54321&sa=U&ei=1sTFVJLfOtOC8gW0jIHYCw&ved=0CBMQFjAA"
_link = link.split('&',1)
result = _link[0]
>>print result
>>'http://blog.test.com/54321'
答案 1 :(得分:2)
你得到那个输出的原因是因为*的贪婪。为了使它变得懒惰:
link = "http://blog.test.com/54321&sa=U&ei=1sTFVJLfOtOC8gW0jIHYCw&ved=0CBMQFjAA"
pat = re.compile("(.*?)\&")
match = re.search(pat,link)
print match.group(1)
注意新模式中的?
。
对于这种简单的情况,我建议使用内置解决方案:
print link.split('&')[0]
答案 2 :(得分:0)
使用积极的先行断言。
pat = re.compile(r"^.*?(?=&)")
match = re.search(pat,link)
print match.group()
没有正则表达式,
>>> link = "http://blog.test.com/54321&sa=U&ei=1sTFVJLfOtOC8gW0jIHYCw&ved=0CBMQFjAA"
>>> s = ""
>>> for i in link:
if i == '&':
print(s)
break
else:
s += i
http://blog.test.com/54321
答案 3 :(得分:0)
这个怎么样?
这也保证了如果找不到'&'
,将返回整个字符串。如果结果为''
,None
,或者不返回字符串的任何部分,则不会出现问题。
>>> link = "http://blog.test.com/54321&sa=U&ei=1sTFVJLfOtOC8gW0jIHYCw&ved=0CBMQFjAA"
>>> symbolIndex = link.find('&')
>>> print link[:symbolIndex] if symbolIndex >= 0 else link
'http://blog.test.com/54321'
在这些情况下,不需要正则表达式。您可以使用常规str
方法轻松完成相同操作。
答案 4 :(得分:0)
另一种解决方案;
link = "http://blog.test.com/54321&sa=U&ei=1sTFVJLfOtOC8gW0jIHYCw&ved=0CBMQFjAA"
for i in link:
if i == "&":
ind=link.index("&")
print (link[:ind])
break
输出;
>>>
http://blog.test.com/54321
>>>
或使用正则表达式;
link = "http://blog.test.com/54321&sa=U&ei=1sTFVJLfOtOC8gW0jIHYCw&ved=0CBMQFjAA"
t = re.search("&",link).group()
if t:
ind=link.index(t)
print (link[:ind])
输出;
>>>
http://blog.test.com/54321
>>>
答案 5 :(得分:0)
使用正则表达式并处理/
和&
之间的数字。
In[2]: import re
In[3]: link = "http://blog.test.com/54321&sa=U&ei=1sTFVJLfOtOC8gW0jIHYCw&ved=0CBMQFjAA"
In[4]: re.findall('^.+/\d+(?=&)',link)
Out[4]: ['http://blog.test.com/54321']