编辑从特定字符到特定字符的字符串

时间:2013-08-02 16:05:30

标签: python regex string

我正在寻找一种编辑字符串的方法。我的字符串就像这个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>

4 个答案:

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

的情况