Python:搜索带有特殊字符的字符串

时间:2012-02-24 06:54:08

标签: python search special-characters substring

在我的python代码中:

_response = '"hidden" name="transactionA**rr**ay" value="[{"id":519292,"status":0,"parentid":&quot'
_responseVal = 'transactionA**r**ay" value="[{"id":'
_breakStr = ','
startIndex = _response.find(_responseVal) + len(_responseVal)
remString = _response[startIndex:]
print 'Remaining string: '+remString

我期待一个空字符串,因为我的搜索字符不存在,而是我得到的     剩下的字符串:

3 个答案:

答案 0 :(得分:1)

find()在找不到匹配项时返回-1,然后在_response中间的某处添加len(_responseVal)和startIndex点。你为什么期望一个空字符串?

答案 1 :(得分:0)

简明扼要地说,问题是:

>>> s = "abcde"
>>> s.find("X")
-1

问题是字符串的find方法在失败时返回-1,因此startIndex变成了_response字符串中间的某个位置。您可以测试从_response.find返回的值,看它是否为-1并专门处理它。更简单的是切换到使用_response.index,这会引发ValueError;然后,您可以捕获异常并正确处理它。

答案 2 :(得分:0)

似乎您想要从较大的字符串中删除给定的字符串。您的具体问题是find返回-1并且未检查此值,并且您需要将len(_responseVal)添加到底部的行,而不是顶部更改起始索引的行。像这样:

remString  = ''
startIndex = _response.find(_responseVal)
if startIndex != -1:
   endIndex   = startIndex + len(_responseVal)
   remString  = _response[startIndex : endIndex]

但实现相同目标的更简单的方法就是使用replace:

remString = _response.replace(_responseVal, '')

如果你想让它为空,如果响应中没有包含responseVal,那么你似乎:

remString = ''
if _response.find(_responseVal) != -1:
   remString = _response.replace(_responseVal)