Python中的字符串具有find(“somestring”)方法,该方法返回字符串中“somestring”的索引号。
但是,假设我有一个类似以下的字符串:
“$ 5 $ 7 $ 9总费用:$ 35 $ 14”
我想找到字符串“Total Cost”之后第一次出现的“$”的索引-我希望能够告诉python,搜索“$”,从“Total Cost”,并返回找到的首次出现的“$”的索引号(相对于整个字符串)。 find()方法将返回0,在这种情况下rfind()也不起作用。
一种执行此操作的笨拙方法如下:
def findStrAfterStr(myString, searchText, afterText):
splitString = myString.split(afterText)
myIndex = len(splitString[0]) + len(afterText) + splitString[1].find(searchText)
return myIndex
myString = "$5 $7 $9 Total Cost: $35 $14"
searchText = "$"
afterText = "Total Cost"
findStrAfterStr(myString, searchText, afterText)
但是似乎应该有一个更简单的方法来执行此操作,并且我认为可能存在,而我只是不知道它是什么。有什么想法吗?
当我发现自己经常这样做时,这对于切片特别有用:
myString[myString.find("startingSubstr"):myString.find("endingSubstr")]
我自然希望“endingSubstr”是在“startingSubstr”之后出现的那个。
最佳答案
使用可选的 str.find
第二个参数:
def findStrAfterStr(myString, searchText, afterText):
after_index = myString.index(afterText)
return myString.find(searchText, after_index)
或者,如pythonm所建议的,您可以使用正则表达式。
我建议对正则表达式使用“我确实需要真的来做”的方法,因为在以后再次阅读时,很难理解代码的作用。我还发现,在大多数情况下,您无需regexp就可以执行相同的操作,并获得更容易阅读的代码。比较:
import re
def findStrAfterStr(myString, searchText, afterText):
pattern = "{0}.*?({1})".format(re.escape(afterText), re.escape(searchText))
match = re.search(pattern, myString)
return match.start(1) if match else -1
关于python - 如何找到python中另一个子字符串之后出现的子字符串的第一次出现?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13183889/