2015-08-14 40 views
2

我有一個類似於"dasdasdsafs[image : image name : image]vvfd gvdfvg dfvgd"的字符串。從這個字符串中,我想刪除從[image :: image]星星的部分。我試圖找到使用以下代碼的'子串' -查找並移除以python中的特定子字符串開始和結尾的字符串

result = re.search('%s(.*)%s' % (start, end), st).group(1) 

但它沒有給我所需的結果。 幫我找到從字符串中刪除子字符串的正確方法。

+1

看看[移除子(https://stackoverflow.com/questions/8703017/remove-sub-string-by-using-python)或[子在python](HTTPS:/ /stackoverflow.com/questions/663171/is-there-a-way-to-substring-a-string-in-python?rq=1)然後[查找字符串中的字符索引](https:// stackoverflow.com/questions/2294493/how-to-get-the-position-of-a-character-in-python) – JGreenwell

回答

4

您可以使用re.sub

>>> s='dasdasdsafs[image : image name : image]vvfd gvdfvg dfvgd' 
>>> re.sub(r'\[image.+image\]','',s) 
'dasdasdsafsvvfd gvdfvg dfvgd' 
+0

太好了,謝謝,它很有用。 –

+0

我可以建議自動修復正則表達式轉義,並防止貪婪匹配,這可能會導致刪除大量不想刪除的文本:pattern ='%s(。*?)%s'%(re.escape(start ),re.escape(end)) answer = re.sub(pattern,'',st) –

+0

@KennyOstrom Yeah Good job!這更一般。 – Kasramvd

2

您可能只需要將方括號轉義出來,因爲這些是正則表達式中的特殊字符(即start = r「\ [image:」和end = r「:image \]」)。

+0

你能舉一個完整的例子嗎?我試過這個'result = re.search('%s(。*)%s'%(start,end),st).group(1)',它返回從開始到結束之間的字符串。但我需要從開始到結束。 –

1

這將刪除所有出現的字符串

import re 

s = "dasdasdsafs[image : image name : image]vvfd gvdfvg dfvgd" 
s = re.sub(r'\[image :.*?: image\]', r'', s) 
2

明顯的問題將是,你不能只是插上的任意字符串,因爲它將包含將改變如何重新看它的字符。相反,你想逃避你的開始和結束字符串。當然,你可以通過這次輸入正確的轉義碼來修正它們,但是如果有一個簡單的方法讓python庫爲你做,並且處理任何值,那就更好了。

import re 
start = re.escape("[image : ") 
end = re.escape(" : image]") 
st = "dasdasdsafs[image : image name : image]vvfd gvdfvg dfvgd" 
result = re.search('%s(.*)%s' % (start, end), st).group(1) 
print result 
+0

對不起,我誤解了這個問題。他希望文字不在這場比賽中。 (儘管逃避仍然是一個好主意,但即使如此) –

相關問題