如何提取两个标记之间的子串?

2020-12-02 20:00:06 发布

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

假设我有一个字符串'gfgfdAAA1234ZZZuijjk',我只想提取'1234'部分。

我只知道直接在AAA之前和ZZZ之后我感兴趣的部分1234后面的几个字符是什么。

使用sed可以对字符串执行类似的操作:

echo "$STRING" | sed -e "s|.*AAA\(.*\)ZZZ.*|\1|"

这会给我带来1234结果。

在Python中如何做同样的事情?

3条回答
网友
1楼 ·
>>> s = 'gfgfdAAA1234ZZZuijjk'
>>> start = s.find('AAA') + 3
>>> end = s.find('ZZZ', start)
>>> s[start:end]
'1234'

如果需要的话,还可以将regexp与re模块一起使用,但在您的情况下这不是必需的。

网友
2楼 ·

正则表达式

import re

re.search(r"(?<=AAA).*?(?=ZZZ)", your_text).group(0)

如果在your_text中没有“AAA”和“ZZZ”,则上面的as is将以AttributeError失败

字符串方法

your_text.partition("AAA")[2].partition("ZZZ")[0]

如果your_text中不存在“AAA”或“ZZZ”,则上面的命令将返回空字符串。

PS Python挑战赛?

网友
3楼 ·

使用正则表达式-documentation作进一步参考

import re

text = 'gfgfdAAA1234ZZZuijjk'

m = re.search('AAA(.+?)ZZZ', text)
if m:
    found = m.group(1)

# found: 1234

或:

import re

text = 'gfgfdAAA1234ZZZuijjk'

try:
    found = re.search('AAA(.+?)ZZZ', text).group(1)
except AttributeError:
    # AAA, ZZZ not found in the original string
    found = '' # apply your error handling

# found: 1234

相关问题