【问题标题】:Python Split String Between Sub-strings Where May be Different Starting Sub-stringsPython在可能不同的起始子字符串的子字符串之间拆分字符串
【发布时间】:2021-10-14 18:59:35
【问题描述】:

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

'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”时,这段代码显然不起作用,那么我该如何调整它来捕捉这两种情况?

【问题讨论】:

  • 带 Id 的字符串是什么样的?正则表达式可能是去这里的方式
  • 嗨 Shree,它看起来一样,但有 Id 而不是 Sku

标签: python


【解决方案1】:

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

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

这是如何工作的?

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

【讨论】:

  • 这非常有效。感谢您的帮助 Shree。
【解决方案2】:

你总是可以在那里添加一个 if 语句:

if 'Sku ' in s:
  start_substring = 'Sku '
  offset = 4
else:
  start_substring = 'Id '
  offset = 3

t = s[s.find(start_substring)+offset : s.find(' at')]
print(t)

【讨论】:

    【解决方案3】:

    你也可以这样做

    import re 
    s = 'T1 Test 2 Sku Red Widget at 10.0' # or input string 
    re_pattern = "Red Widget"
    regex = re.compile(re_pattern)
    for m in regex.finditer(s): 
        print( m.group()) 
    

    【讨论】:

      猜你喜欢
      • 2015-08-29
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      • 2016-04-28
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      相关资源
      最近更新 更多