python - 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”时,这段代码显然不起作用,那么我该如何调整它来捕捉这两种情况?
解决方案
一种方法是使用正则表达式:
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'的空格。函数提取与这些条件匹配的任何内容。
推荐阅读
- excel - 在第一个 IF 语句后,多个用户表单复选框未写入工作表
- python - 十六进制到十进制转换但小端python
- python - 如何使 discord.py 机器人不以自己的反应启动代码
- html - Web 表单中的日期格式
- windows - 使用 Vagrant 配置 Windows VM 无法执行远程 WinRM 命令
- javascript - 如何从异步函数返回字符串
- .net-core - Visual Studio 项目无法加载“无法找到 .NET SDK”、错误,同时 Cmder 无法加载
- postgresql - 从 Postgresql 中的日期中减去数字
- python - 使用python中的面板数据调整随机森林超参数
- c++ - Cout 在 for 循环中使用不正确的变量值执行(同时也失败了?)