[英]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.