在不使用字符串切片的情况下对子字符串应用正则表达式
我想在一个较长的字符串中,从某个特定的位置开始,搜索正则表达式的匹配结果,并且不想使用字符串切片。
我的背景是,我想在一个字符串中反复查找各种正则表达式的匹配。用Python来做的话,自然的解决办法是记录当前在字符串中的位置,然后在循环中使用,比如:
re.match(regex, largeString[pos:])
但是对于非常大的字符串(大约1MB),像largeString[pos:]
这样的字符串切片会变得很耗费资源。所以我在寻找一种方法来避免这个问题。
顺便提一下,挺有趣的是,在Python文档的一个小部分中,提到了一个可选的pos
参数,可以用在匹配函数中(这正是我想要的),但在实际的函数中却找不到这个参数 :-)。
4 个回答
2
在编程中,有时候我们会遇到一些问题,像是代码运行不正常或者出现错误。这些问题可能是因为我们写的代码有一些小错误,或者是我们没有理解某些概念。
比如,有些人可能在使用某个编程语言时,不太清楚它的语法规则,或者对某些函数的用法不太明白。这就像是我们在学习一门新语言时,可能会因为不懂某些单词或句子结构而说错话。
当我们在网上寻找解决方案时,像StackOverflow这样的平台就很有帮助。这里有很多人分享他们的经验和解决方案,帮助我们更好地理解问题所在。
总之,遇到问题时,不要气馁,多看看别人的解决办法,慢慢积累经验,你会发现编程其实是个很有趣的过程。
>>> import re
>>> m=re.compile ("(o+)")
>>> m.match("oooo").span()
(0, 4)
>>> m.match("oooo",2).span()
(2, 4)
4
pos
这个关键词只能在方法版本中使用。比如,
re.match("e+", "eee3", pos=1)
这个是无效的,但
pattern = re.compile("e+")
pattern.match("eee3", pos=1)
这个是有效的。
6
带有 pos 和 endpos 参数的变体只存在于正则表达式对象中。你可以试试这个:
import re
pattern = re.compile("match here")
input = "don't match here, but do match here"
start = input.find(",")
print pattern.search(input, start).span()
... 输出 (25, 35)