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

531 投票
23 回答
1191644 浏览
提问于 2025-04-16 09:49

假设我有一个字符串 'gfgfdAAA1234ZZZuijjk',我想从中提取出 '1234' 这一部分。

我只知道在 AAA 之前的几个字符,以及在 ZZZ 之后我感兴趣的部分 1234

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

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

这样我就能得到 1234 作为结果。

那么在 Python 中怎么做同样的事情呢?

23 个回答

131

正则表达式

import re

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

如果在your_text中没有找到"AAA"和"ZZZ",上面的代码会出错,提示AttributeError

字符串方法

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

如果在your_text中找不到"AAA"或"ZZZ",上面的代码会返回一个空字符串。

PS Python挑战?

161
>>> s = 'gfgfdAAA1234ZZZuijjk'
>>> start = s.find('AAA') + 3
>>> end = s.find('ZZZ', start)
>>> s[start:end]
'1234'

如果你想的话,也可以使用正则表达式和re模块,但在你的情况下并不是必须的。

873

使用正则表达式 - 可以查看文档了解更多信息

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

撰写回答