2

文字列を編集する方法を探しています。私の文字列はこのようhttp://www.example.com/example:8080になり、3 番目に出現する "/" を見つけてから、文字列を編集して、http://www.example.com:80803 番目に出現する "/" と 2 番目に出現する ":" の間にあるものを基本的に削除します。正規表現を書いてみたところ、このように見える最初の部分にたどり着くことができましたが((.*?/){3}(.*))、2番目のタスクを通過して最終的な文字列を取得するにはどうすればよいですか?

ありがとう

編集 :

「/」が発生する回数は関係ありません。私がhttp://www.example.com/example/index.php:8080望むのは、「/」の 3 回目の出現から「:」の 2 回目の出現までですhttp://www.example.com:8080

4

4 に答える 4

2

シンプルだが醜い方法は次のとおりです。

>>> x = 'http://www.example.com/example:8080'
>>> x.find('/',x.find('/',x.find('/')+1)+1)
22
>>> x.rfind(':')
30
>>> x[:22] + x[30:]
'http://www.example.com:8080'

rfind()逆方向に検索することに注意してください。URL が期待どおりに表示されない場合、これがうまくいかない可能性があることに注意してください。x[:22]とのx[:30]部分は、Python の便利な機能であるスライスの例です。詳細については、python での文字列のチュートリアルを参照してください。

于 2013-08-02T16:11:53.627 に答える
1

質問に対する正確な回答ではありませんが、問題を解決する可能性があります。urlparseそれが常にURLである場合は、からのモジュールを使用できますurllib2

In [9]: from urllib2 import urlparse

In [10]: parsed_url = urlparse.urlparse('http://www.example.com/example:8080')

In [11]: parsed_url
Out[11]: ParseResult(scheme='http', netloc='www.example.com', path='/example:8080', params='', query='', fragment='')

In [12]: parsed_url.path
Out[12]: '/example:8080'

In [13]: parsed_url.path.split(':')
Out[13]: ['/example', '8080']

あなたができる休息だと思います。

于 2013-08-02T16:18:33.753 に答える
0

私には 2 つの解決策がありurlparseます。モジュール (推奨) と正規表現を使用します。

import urlparse
import re

# METHOD 1: use urlparse
# Parse the incorrect URL
incorrect_url = 'http://www.example.com/example:8080'
scheme, netloc, path, params, query, fragment =  urlparse.urlparse(incorrect_url)

# Fix up
path, port = path.split(':')
netloc = netloc + ':' + port
path = ''

# Putting them all together
correct_url = urlparse.urlunparse((scheme, netloc, path, params, query, fragment))
print correct_url


# METHOD 2: use regular expression
scheme, dummy1, dummy2, netloc, path, port=re.split(r'[/:]', incorrect_url)
correct_url = '{}://{}:{}'.format(scheme, netloc, port)
print correct_url

一般に、URL を扱うときは、適切なツールである urlparse を好みます。正規表現ソリューションには、短いという利点がありますが、まれなケースで問題が発生する可能性があります。

于 2013-08-02T16:47:51.547 に答える
0

回答を受け入れていないため、行き詰まる可能性があります。他の回答で説明されているトリックを実行する例を次に示します。

from urllib2 import urlparse

url = 'http://www.example.com/example:8080'
parsedURL = urlparse.urlparse(url)
port = url.split(':')[2] 
fixedURL = parsedURL.scheme + '://' + parsedURL.netloc + ':' + port

最初の行は、URL を受け入れて解析し
ます。2 行目/は、:

:これは、ポートが最後にあり、2秒しかない場合にのみ機能します

于 2013-08-05T18:18:34.633 に答える