2015-08-14 83 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

对不起,我误解了这个问题。他希望文字不在这场比赛中。 (尽管逃避仍然是一个好主意,但即使如此) –

相关问题