2

我正在寻找一种方法来编辑我的字符串。我的字符串是这样的,http://www.example.com/example:8080现在我想做的是找到第三次出现的“/”,然后编辑字符串以http://www.example.com:8080基本上删除第三次出现的“/”和第二次出现的“:”之间的内容。我尝试编写一个正则表达式,并且能够进入看起来像这样的第一部分,((.*?/){3}(.*))但是如何通过第二个任务并获得最终的字符串?

谢谢

编辑 :

“/”出现的次数不是问题。它甚至可以http://www.example.com/example/index.php:8080是我想要的是从第三次出现“/”到第二次出现“:”内容应该被删除或删除,我们最终应该有一个字符串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

不是问题的确切答案,但可能会解决问题。如果 url 总是这样,您可以使用urlparse来自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

我有两个解决方案:使用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:秒时才有效

于 2013-08-05T18:18:34.633 回答