2016-04-03 60 views
0

在Python中,我將如何獲得子字符串周圍的特定數量的字符?在子字符串周圍獲取字符集半徑

例如,這裏是我的字符串:

string='Mad Max: Fury Road' 

比方說,我想從'ax: Fur'添加四個大字走,兩側,到輸出,因此這將是'ad Max: Fury Ro'

如果要查找的子字符串是'Fury Road',string,那麼輸出將是'ax: Fury Road',它會忽略在右側沒有任何要添加的內容。

回答

2

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 
+0

你也可以在'before,middle,after = ...'而不是'parts = ...'之後執行'parts'的元素,稍微容易閱讀並且運行速度稍快。 –

+0

@ TadhgMcDonald-Jensen:非常好的建議。實現。 – zondo

0

你也可以得到字符串之前和.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