在Python中,我將如何獲得子字符串周圍的特定數量的字符?在子字符串周圍獲取字符集半徑
例如,這裏是我的字符串:
string='Mad Max: Fury Road'
比方說,我想從'ax: Fur'
添加四個大字走,兩側,到輸出,因此這將是'ad Max: Fury Ro'
。
如果要查找的子字符串是'Fury Road'
,string
,那麼輸出將是'ax: Fury Road'
,它會忽略在右側沒有任何要添加的內容。
在Python中,我將如何獲得子字符串周圍的特定數量的字符?在子字符串周圍獲取字符集半徑
例如,這裏是我的字符串:
string='Mad Max: Fury Road'
比方說,我想從'ax: Fur'
添加四個大字走,兩側,到輸出,因此這將是'ad Max: Fury Ro'
。
如果要查找的子字符串是'Fury Road'
,string
,那麼輸出將是'ax: Fury Road'
,它會忽略在右側沒有任何要添加的內容。
str.partition
進來非常方便在這裏:
def get_sub(string, sub, length):
before, search, after = string.partition(sub)
if not search:
raise ValueError("substring not found")
return before[-length:] + sub + after[:length]
你也只是在if
語句返回before
反而提高了一個ValueError
的。這將返回字符串不變。用法:
print(get_sub("Mad Max: Fury Road", "Fury Road", 4))
#ax: Fury Road
print(get_sub("Mad Max: Fury Road", "Fu", 4))
#ax: Fury R
你也可以得到字符串之前和.split()
子串之後再返回兩個部分:
def get_sub_and_surrounding(string,sub,length):
before,after = string.split(sub,1) #limit to only one split
return before[-length:] + sub + after[:length]
值得注意的是,在這種情況下,如果sub
實際上不是一個子那麼第一行會提出一個ValueError
,但你可以得到確切的指標分裂它是這樣的:
def get_sub_and_surrounding(string,sub,length):
i_start = string.index(sub) #index of the start of the substring
i_end = i_start + len(sub) #index of the end of the substring (one after)
my_start = max(0, i_start -length)
# ^prevents use of negative indices from counting
# from the end of the string by accident
my_end = min(len(string), i_end+length) #this part isn't actually necessary, "a"[:100] just goes to the end of the string
return string[my_start : my_end]
在這種情況下,如果sub不在字符串中,string.index(sub)
將引發ValueError
。
你也可以在'before,middle,after = ...'而不是'parts = ...'之後執行'parts'的元素,稍微容易閱讀並且運行速度稍快。 –
@ TadhgMcDonald-Jensen:非常好的建議。實現。 – zondo