我正在寻找一种编辑字符串的方法。我的字符串就像这个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
< / p>
答案 0 :(得分: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()
向后搜索。如果您的网址看起来不像您期望的那样,请注意这可能会出错。 x[:22]
和x[:30]
部分是切片的例子,这是python的一个有用特性。有关详细信息,请阅读strings in python.
答案 1 :(得分:1)
不是问题的确切答案,但可以解决问题。如果网址始终如此,您可以使用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']
休息你可以这么想。
答案 2 :(得分: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。正则表达式解决方案的优点是更短,但可能会让你遇到麻烦的一些极端情况。
答案 3 :(得分: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 :
s