0

私は長い文字列をたくさん持っています-それらのすべてが同じ長さと内容を持っているわけではないので、インデックスを使用できない理由です-そして私はそれらすべてから文字列を抽出したいと思います。これは私が抽出したいものです:

http://www.someDomainName.com/anyNumber 

SomeDomainName数字は含まれず、anyNumber長い文字列ごとに異なります。コードは、可能な任意の文字列から目的の文字列を抽出する必要があり、スペースや長い文字列に表示される可能性のあるその他の奇妙なことを考慮に入れる必要があります-正規表現で可能である必要がありますか?-。誰かがこれで私を助けることができますか?ありがとうございました。

更新:私はそのwwwを言うべきだった。と.comは常に同じです。また、someDomainName!しかしhttp://www.、文字列には別のものがあります

4

4 に答える 4

2
import re
results = re.findall(r'\bhttp://www\.someDomainName\.com/\d+\b', long_string)
于 2012-09-30T17:31:50.867 に答える
1
>>> import re
>>> pattern = re.compile("(http://www\\.)(\\w*)(\\.com/)(\\d+)")
>>> matches = pattern.search("http://www.someDomainName.com/2134")
>>> if matches:
        print matches.group(0)
        print matches.group(1)
        print matches.group(2)
        print matches.group(3)
        print matches.group(4)

http://www.someDomainName.com/2134
http://www.
someDomainName
.com/
2134

上記のパターンでは、5つのグループをキャプチャしました-

  • 1つは、一致する完全な文字列です
  • 残りは、表示されている角かっこ順になっています。(つまり、2番目の角かっこを探しています。)-(\\w*)

必要に応じて、関心のある部分のみをキャプチャできstringます。したがって、不要bracketsなパターンの残りの部分から削除して、そのままにしておくことができます。(\w*)

>>> pattern = re.compile("http://www\\.(\\w*)\\.com/\\d+")
>>> matches = patter.search("http://www.someDomainName.com/2134")
>>> if matches:
       print matches.group(1) 

someDomainName

上記の例ではgroups - 2, 3 and 4、前の例のように、1 group..のみをキャプチャしたため、はありません。また、yesgroup 0は常にキャプチャされます。..に一致する完全な文字列です。

于 2012-09-30T17:12:09.617 に答える
0

ええ、あなたの最も単純な賭けは正規表現です。これがおそらく仕事を成し遂げる何かです:

import re
matcher = re.compile(r'www.(.+).com\/(.+)
matches = matcher.search(yourstring)
if matches:
    str1,str2 = matches.groups()
于 2012-09-30T17:09:07.547 に答える
0

SomeDomainNameにドットがないことが確実な場合は、文字列 ".com /"の最初の出現箇所を取得し、そのインデックスからすべてを取得できます。

これにより、保守が難しい正規表現の使用を回避できます。

exp = 'http://www.aejlidjaelidjl.com/alieilael'
print exp[exp.find('.com/')+5:]
于 2012-09-30T17:37:03.230 に答える