如何使用正则表达式搜索一系列唯一的搜索字符串,而不必从python开始

如何使用正则表达式搜索一系列唯一的搜索字符串,而不必从python开始,python,regex,string,Python,Regex,String,有点像你问的问题 假设我有一个searchstrings(string1,string2,string3)元组,我想在一个字符串中搜索,该字符串只有一个唯一的匹配项string1,string2,string3,并且我想搜索,而不必从字符串的开头重新启动,但是从上次搜索的位置开始,因为字符串可能很大,我不想每次都从0开始。我知道str.find()将返回上次成功查找的索引,但是,我需要使用regex 伪代码: first find string1 start at index0 return t

有点像你问的问题

假设我有一个searchstrings
(string1,string2,string3)
元组,我想在一个
字符串
中搜索,该字符串只有一个唯一的匹配项
string1
string2
string3
,并且我想搜索,而不必从字符串的开头重新启动,但是从上次搜索的位置开始,因为字符串可能很大,我不想每次都从0开始。我知道
str.find()
将返回上次成功查找的索引,但是,我需要使用regex

伪代码:

first find string1 start at index0
return the index1 of string1
find string2, start at index1
return index2 of string2
find string3, start with index2

您可以保留一些值
i
,以跟踪每次迭代的起始点,并在
find
之前对字符串进行切片

SearchStrings = ("string1","string2","string3")
String = "aaaaaaaaaaaaaaaastring1aaaaaaaaaaaaaaaastring2aaaaaaaaaaaaaaaastring3"
i=0
for s in SearchStrings:
    index = String[i:].find(s)
    print(f'{s}: {index+i}')
    i+=index+len(s)
输出

string1: 16
string2: 39
string3: 62

因为
string1
总是先出现,然后是
string2
,最后是
string3
。使用正则表达式:
*?string1.*?string2.*?string3
就可以了


代码
输出
提示 您可以为
search\u string1
和类似的其他项赋予任何值。正则表达式将按顺序查找这三个字符串的出现处。如果需要三个以上的字符串,则可以使用循环简单地构造正则表达式。这是您需要的正则表达式general正则表达式:

______.*?______.*?______....

如果您面临任何进一步的问题,请发表评论。

我相信您需要

import re

searchStrings = ("string1","string2","string3")
String = "aaaaaaaaaaaaaaaastring1aaaaaaaaaaaaaaaastring2aaaaaaaaaaaaaaaastring3"

ptrn = re.compile(r"(" + "|".join(searchStrings) + r")")

print(ptrn.findall(String))

您还可以使用进行有效的字符串搜索。但是它不是基于正则表达式的。

这几乎就像我想使用str.find(),但是使用正则表达式一样。
string1
应该总是第一个出现吗?字符串
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaastring1aaaaaaaaaaaaaaaaaaaaaaaaastring3
是否应返回成功匹配?string1将始终出现在string2之后,然后是string3。输出应该是什么?谢谢,这是一种简单的方法,尽管算法更复杂。希望利用re模块提供的现有功能
['string1aaaaaaaaaaaaaaaastring2aaaaaaaaaaaaaaaastring3']
______.*?______.*?______....
import re

searchStrings = ("string1","string2","string3")
String = "aaaaaaaaaaaaaaaastring1aaaaaaaaaaaaaaaastring2aaaaaaaaaaaaaaaastring3"

ptrn = re.compile(r"(" + "|".join(searchStrings) + r")")

print(ptrn.findall(String))