在Python中查找StringB之前的最后一个stringA实例

在Python中查找StringB之前的最后一个stringA实例,python,string,Python,String,我试图从HTML文件中提取一些字符串。有许多这样的字符串(长话短说),它们通常遵循“xsomestufwritenhere!”的模式,开头是“X”,结尾是“!” 我写了一些混乱的代码,这些代码是从HTML中提取出来的,但是我发现在我想要提取的部分中间有一个“!”的情况很难处理。e、 g XWTF!那没有道理 我一直在使用.find()获取段落的索引,以便在HTML的行中切掉它们。e、 g: line[line.find(“X”):line.find(“!”)+1] 在HTML文件中(用于上下文:

我试图从HTML文件中提取一些字符串。有许多这样的字符串(长话短说),它们通常遵循“xsomestufwritenhere!”的模式,开头是“X”,结尾是“!”

我写了一些混乱的代码,这些代码是从HTML中提取出来的,但是我发现在我想要提取的部分中间有一个“!”的情况很难处理。e、 g

XWTF!那没有道理

我一直在使用.find()获取段落的索引,以便在HTML的行中切掉它们。e、 g:

line[line.find(“X”):line.find(“!”)+1]

在HTML文件中(用于上下文:Facebook消息副本),所有内容的格式都很奇怪(该死的扎克伯格),所以是X。。。!可以有任何类型的文本或任何在任何一边。我指出这一点是因为我必须在代码中添加

重新搜索(“,”行[line.find(“X”):line.find(!”)

以确保后面的“!”不会干扰我的索引。e、 g:

X什么东西!这是一个新句子

<> P>所以,我所面临的问题是,我不知道该做什么来区分一个“!”何时出现在一个段落的中间,它的结尾是一个“我”。 我想基本问题可以归结为:如何在stringB的第一个实例之前找到stringA的最后一个实例,在本例中,stringB是一个空白


我希望这一切都有意义。对我的绝望感到抱歉。自从我做了一个Python模块后,我已经一年没有编程了,回来主要是为了一个项目;你应该尝试使用BeautifulSoup

无论如何,请尝试以下方法:

matches = re.findall(r'X\S+!', my_input_string)
print(matches)

如果要使用最后一个索引而不是第一个实例,请使用
rfind
而不是
find
。另一方面,如果您正在解析HTML,请不要使用正则表达式,而是使用类似HTML解析器或BeautifulSoup的东西