我有一个字符串 - Python:
string = "/foo13546897/bar/Atlantis-GPS-coordinates/bar457822368/foo/"
预期输出为:
"Atlantis-GPS-coordinates"
我知道预期的输出总是被左边的“/ bar /”和右边的“/”包围:
"/bar/Atlantis-GPS-coordinates/"
建议的解决方案如下:
a = string.find("/bar/")
b = string.find("/",a+5)
output=string[a+5,b]
这有效,但我不喜欢它。 有人知道一个美丽的功能或提示吗?
答案 0 :(得分:10)
您可以使用split:
>>> string.split("/bar/")[1].split("/")[0]
'Atlantis-GPS-coordinates'
添加最大分割1
的一些效率我认为:
>>> string.split("/bar/", 1)[1].split("/", 1)[0]
'Atlantis-GPS-coordinates'
或使用partition:
>>> string.partition("/bar/")[2].partition("/")[0]
'Atlantis-GPS-coordinates'
或正则表达式:
>>> re.search(r'/bar/([^/]+)', string).group(1)
'Atlantis-GPS-coordinates'
取决于您和您的数据的对象。
答案 1 :(得分:3)
你没有的并不是那么糟糕。我把它写成:
start = string.find('/bar/') + 5
end = string.find('/', start)
output = string[start:end]
只要您知道/bar/WHAT-YOU-WANT/
总会出现。否则,我会找到regular expression knife:
>>> import re
>>> PATTERN = re.compile('^.*/bar/([^/]*)/.*$')
>>> s = '/foo13546897/bar/Atlantis-GPS-coordinates/bar457822368/foo/'
>>> match = PATTERN.match(s)
>>> match.group(1)
'Atlantis-GPS-coordinates'
答案 2 :(得分:1)
import re
pattern = '(?<=/bar/).+?/'
string = "/foo13546897/bar/Atlantis-GPS-coordinates/bar457822368/foo/"
result = re.search(pattern, string)
print string[result.start():result.end() - 1]
# "Atlantis-GPS-coordinates"
这是一个Python 2.x示例。它首先做的是: 1.(?&lt; = / bar /)表示只处理以下正则表达式(如果/ bar /必须在它之前) 2.&#39;。+?/&#39;表示任何数量的字符,直到下一个&#39; /&#39;炭
希望有所帮助。
如果你需要进行这种搜索,最好是编译&#39;这是对性能的追求,但如果你只需要这样做就不要打扰。
答案 3 :(得分:0)
使用mydomain.pk
(比其他解决方案慢):
Host