我可以在 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)
我有一个大字符串。我经常只需要搜索这个字符串的一部分,但我现在确实需要在大字符串中找到切片中找到的位。
有没有办法在字符串上使用 '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)