我可以在 Python 中搜索一段字符串,但保持索引相对于原始字符串吗?

Can I search a slice of a string in Python but keep the index relative to the original string?

我有一个大字符串。我经常只需要搜索这个字符串的一部分,但我现在确实需要在大字符串中找到切片中找到的位。

有没有办法在字符串上使用 'mask'?即

original = 'This is a mock-up large string'
a_slice = original[10:23]
a_slice.find('o')  
>>> 1 in a_slice; 11 in original

简单地重复搜索是没有选择的,因为那样CPU成本太高。

更新

上面的玩具示例使用 find。在实践中我使用 re.finditer()。

str.find 接受关于 start/end 搜索位置的选项参数,例如:

original = 'This is a mock-up large string'
o = original.find('o', 10, 23)
# 11

来自文档:

find(...)

S.find(sub [,start [,end]]) -> int

Return the lowest index in S where substring sub is found,
such that sub is contained within S[start:end].  Optional
arguments start and end are interpreted as in slice notation.

如果您想使用 finditer(returns 匹配对象的迭代器),请按照要求进行操作:

>>> import re
>>> original = 'This is a mock-up large string'
>>> p = re.compile('o')
>>> for match in p.finditer(original, 10, 23):
...  print match.pos
10

简短说明:finditer() 函数 (https://docs.python.org/2/library/re.html#re.finditer) is not the same as finditer() method on a regex object (https://docs.python.org/2/library/re.html#re.RegexObject.finditer)