0

domain.zz または domain.zzz または domain.zz.zz または /something を取得しようとしています。

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"""

これは私が今持っているものです:

>>> 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

そして、これらの 2 つのグループを 1 つの再質問で取得したいと思います。

編集:これはほぼ完璧です: '([a-z0-9.-]+[.][az]{2,4})|(?:/[a-z0-9]+)' しかし、それはつかみます文字列の最初からいくつかのゴミ。

文字列は、この例よりもはるかにランダムです: 私はこれらの 3 つのケースに焦点を当てています:

domain.co.uk/something
      ^  ^  ^
domain.com/something
      ^   ^
domain.com
      ^   
4

2 に答える 2

1

これはどう:

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'))

出力:

domain.zz.zz
/something

このようにして、「ベース」と「エクストラ」の両方のデータを取得します...それらを結合して、完全な文字列を再度取得します。

編集: ドメイン マッチングを改善するためにパターンを更新し、python 3 構文の印刷を変更しました

于 2013-03-07T11:04:38.710 に答える
1

これを試してみてください。これがあなたの要件に正確に一致するかどうかはわかりませんが、問題を明確にし、問題がある場合はもう少しパターン化することができます...

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

match.group('domain')必要に応じて、とでパーツにアクセスできますmatch.group('folder')

出力:

[('domain.zz', ''), ('domain.zz.zz', 'something'), ('randomh564domain.zzz', 'something'), ('domain.zz', 'something'), ('domain.zz.zz', 'something'), ('domain.zzz', 'something')]
于 2013-03-07T11:24:50.627 に答える