Python-提取子字符串的最优雅的方法,它被赋予左边框和右边框

2024-06-16 09:29:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个字符串-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]

这行,但我不喜欢。 有人知道一个漂亮的功能或小费吗?


Tags: 字符串功能outputstringfoobarfind解决方案
3条回答

您可以使用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'

取决于你和你的数据。

你所没有的并不是那么糟糕。我会把它写成:

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'
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" 

这是一个Python2.x示例。它首先要做的是: 一。(?<;=/bar/)表示只有在以下正则表达式之前处理它(因此/bar/必须在它之前) 2.'。+?/'表示下一个'/'字符之前的任何字符数

希望有帮助。

如果你需要做这种搜索一堆,它是更好的'编译'这个搜索性能,但如果你只需要做一次,不麻烦。

相关问题 更多 >