如何提取两个标记之间的子字符串?
假设我有一个字符串 '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