首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >(domain.zzz domain.zz.zz domain.zz)和/something/的regexp

(domain.zzz domain.zz.zz domain.zz)和/something/的regexp
EN

Stack Overflow用户
提问于 2013-03-07 18:39:57
回答 2查看 197关注 0票数 0

正在尝试获取domain.zz、domain.zzz、domain.zz.zz或/something。

代码语言:javascript
复制
import re
the_string = """lalalla?url=http2F%2Fdomain.zz%slgkfgs0s"""
the_string = """lalalla?url=http2F%2Fdomain.zz.zz/something%slgkfgs0sf"""
the_string = """lalalla?url=randomh564domain.zzz/something%slgkfgs0sf"""
the_string = """lalalla?url=randomeefsdlk876%domain.zz/something%slgkfgs0sf"""
the_string = """p%3A%2F%2Fdummy_test.com/ratata%2F&amp"""
the_string = """p%3A%2F%2Fdum2test.co.uk/something%2F&-kj"""

这就是我现在所拥有的:

代码语言:javascript
复制
>>> print( re.findall('(?:www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4})(?:/[a-z0-9]+)',the_string))
domain.zzz/something
domain.zz/something
domain.zz.zz/something

>>> print( re.findall('www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}',the_string))
domain.zzz
domain.zz
domain.zz.zz

我想让这两组人回答一个问题。

编辑:这几乎是完美的:'(a-z0-9.-+.{2,4})|(?:/a-z0-9+)‘,但它从字符串的开头抓取了一些垃圾。

字符串的随机性比本例中的要大得多:我将重点放在这3种情况上:

代码语言:javascript
复制
domain.co.uk/something
      ^  ^  ^
domain.com/something
      ^   ^
domain.com
      ^   
EN

回答 2

Stack Overflow用户

发布于 2013-03-07 19:04:39

这样如何:

代码语言:javascript
复制
import re
the_string = """lalalla?url=http@domain.zz%slgkfgs0sf"""
the_string = """lalalla?url=http@domain.zz.zz/something%slgkfgs0sf"""
#the_string = """lalalla?url=http@domain.zzz/something%slgkfgs0sf"""
#the_string = """lalalla?url=ht%domain.zz/something%slgkfgs0sf"""
#the_string = """lalalla?url=httpsd%domain.zz.zz/something%slgkfgs0sf"""
#the_string = """lalalla?url=www.domain.zzz/something%slgkfgs0sf"""

test = re.compile('(?P<base>[a-zA-Z0-9_\-\.]*?[a-zA-Z0-9_\-]+\.[z\.]+)(?P<extra>/[a-zA-Z0-9_\-]+)')

for match in test.finditer(the_string):
    print(match.group('base'))
    print(match.group('extra'))

输出:

代码语言:javascript
复制
domain.zz.zz
/something

这样你就可以把数据放在'base‘和’extra‘中了……把它们组合起来,再一次得到完整的字符串。

编辑:更新了模式以更好地进行域匹配,并更改了python 3语法的打印

票数 1
EN

Stack Overflow用户

发布于 2013-03-07 19:24:51

试试这个,我不知道这是否完全符合你的要求,但也许你可以澄清问题,如果有问题,模式更进一步……

代码语言:javascript
复制
print re.findall('=(?:[^@%/.]*(?:@|%(?:2F)?))?(?:www.)?(?P<domain>[^%@/]*)(?:/(?P<folder>[^%]*))?(?:[%@/].*)?$',the_string,re.MULTILINE)

如果您愿意,可以使用match.group('domain')match.group('folder')访问这些部分

输出:

代码语言:javascript
复制
[('domain.zz', ''), ('domain.zz.zz', 'something'), ('randomh564domain.zzz', 'something'), ('domain.zz', 'something'), ('domain.zz.zz', 'something'), ('domain.zzz', 'something')]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15268967

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档