首页 > 解决方案 > Python在可能不同的起始子字符串的子字符串之间拆分字符串

问题描述

我的字符串看起来像这样:

'T1 Test 2 Sku Red Widget at 10.0'

要提取“红色小部件”,我一直在使用以下代码:

s = 'T1 Test 2 Sku Red Widget at 10.0'
t = s[s.find('Sku ')+4 : s.find(' at')]
print(t)

这工作正常,但现在字符串输入已更改,因此它们可能包含“Sku”(起始子字符串)或“Id”。

当使用“Id”时,这段代码显然不起作用,那么我该如何调整它来捕捉这两种情况?

标签: python

解决方案


一种方法是使用正则表达式:

import re

s1 = 'T1 Test 2 Sku Red Widget at 10.0'
s2 = 'T1 Test 2 Id Red Widget at 10.0'

pat = '(?:(?<=Sku\s)|(?<=Id\s)).*(?=\sat)'
print(re.search(pat,s1).group(0)) # returns Red Widget
print(re.search(pat,s2).group(0)) # also returns Red Widget

这是如何运作的?

我们使用lookbehinds 和lookaheads。正则表达式中的第一组表达式指定我们应该查找前面有“Sku”或“Id”后跟空格的文本。第二组做同样的事情,但是向前看,后面是'at'的空格。函数提取与这些条件匹配的任何内容。


推荐阅读