如何在字符串搜索中使用"find"查找搜索结果左侧的起始位置



请原谅我可能发布了最愚蠢的问题,但 Python newbee 在这里。 我在正则表达式的章节中,从文件中提取电子邮件地址似乎很容易。问题是我还没有理解如何使用"普通"代码完成此操作。 我可以使用 .find 找到"@"的位置,然后通过查找"@"后面的下一个空格来定位电子邮件地址的末尾。 但是如何将搜索"@"的"向左"移动呢?没有...

这可能是最简单的事情,但是我已经搜索了很多网站,以至于我放弃并在这里创建了一个帐户。 我想通过负数,我也许可以向左移动,但错了。如果有人能为我打开灯泡,将不胜感激。谢谢一堆!

例:

data = "From random-text myemail@gmail.com Sat 21:19"
atpos = data.find("@") 
end = data.find(" ",atpos)
start = data.find(" ",**???**,**???**)
address = data[start:end]
print(address)
data = "From random-text myemail@gmail.com Sat 21:19"
data_list = data.split(' ')
for word in data_list:
if '@' in word:
print(word)

稍后您可以通过用"@"符号拆分此循环结果来提取电子邮件域和名称

您可以按空格拆分字符串,然后为每个单词检查是否有@字符串。如果是这样,那么您可以通过@字符串拆分单词,以使部分向左和向右

data = "From random-text myemail@gmail.com Sat 21:19"
for text in data.split():
if "@" in text:
left, right = text.split('@')
print(f'The email starts with "{left}" and is in the domain "{right}"')

输出

The email starts with "myemail" and is in the domain "gmail.com"

更新

如果您确实想使用索引位置并查找来执行此操作。那么你已经知道如何找到@的位置,并且你知道如何通过指定开始索引来搜索@后的第一个空格。

find 的文档指定它查找最低索引。但是,我们可以使用rfind来查找最高索引,即字符串中最后一个出现的索引。

string.find(s, sub[, start[, end]]( 返回 s 中的最低索引,其中 找到子字符串 sub 使得 sub 完全包含在 s[开始:结束]。失败时返回 -1。开始和结束以及 负值的解释与切片的解释相同。

string.rfind(s, sub[, start[, end]]( 像 find(( 一样,但找到最高的 指数

因此,使用 rfind,我们可以在字符串中找到空格的最后一个实例。 如果我们传递 0 作为开始(所以从开头开始(,然后将@的索引作为结尾传递,那么它将找到字符串开头和@符号之间的最后一个空格字符的索引。 然后我们要添加 1,因为我们不想要空间的索引,而是索引之后。

data = "From random-text myemail@gmail.com Sat 21:19"
#get the index of the @
at_index = data.find('@') 
# get the first index of space starting after @
right_index = data.find(' ', at_index) 
# get the last index of space starting from start but not exceeding index of @
left_index = data.rfind(' ', 0, at_index) + 1 
print(data[left_index:right_index])

输出

myemail@gmail.com

相关内容