問題描述
獲取子字符串周圍的字符數半徑 (Get set number radius of characters around substring)
在 Python 中,如何在子字符串周圍獲得一定數量的字符?
例如,這是我的字符串:
string='Mad Max: Fury Road'
假設我想添加四個字符從 'ax: Fur'
兩邊,進入輸出,所以它會是 'ad Max: Fury Ro'
。
如果要查找的子字符串是 string
中的 'Fury Road'
,那麼輸出將是 'ax: Fury Road'
,它會忽略它右側沒有可添加的內容。
參考解法
方法 1:
str.partition
comes in really handy here:
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]
You could also just return before
in the if
statement instead of raising a ValueError
. That would return the string unchanged. Usage:
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
方法 2:
you could also get the string before and after the substring with .split()
then return parts of both:
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]
it is worth noting that in this case if sub
is not actually a substring then the first line will raise a ValueError
but you can get the exact indexes for splitting it up like this:
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]
In this case string.index(sub)
will raise a ValueError
if sub is not in string.
(by Shane Smiskol、zondo、Tadhg McDonald‑Jensen)