簡體   English   中英

Python 在子字符串之間拆分字符串,其中起始子字符串可能不同

[英]Python Split String Between Sub-strings Where May be Different Starting Sub-strings

我有看起來像這樣的字符串:

'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

這是如何運作的?

我們使用后視和前瞻。 正則表達式中的第一組表達式指定我們應該查找前面是“Sku”或“Id”后跟一個空格的文本。 第二組做同樣的事情,但向前看,一個空格后跟“at”。 與這些條件匹配的任何內容都由該函數提取。

您始終可以在其中添加 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)

你也可以這樣做

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()) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM