<p>您可以将字符串按空格分开,然后为每个单词检查是否有<code>@</code>字符串。如果是这样的话,那么您就可以用<code>@</code>字符串来拆分单词,从而得到左右两侧的部分</p>
<pre class="lang-py prettyprint-override"><code>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}"')
</code></pre>
<p><strong>输出</strong></p>
<pre><code>The email starts with "myemail" and is in the domain "gmail.com"
</code></pre>
<p><strong>更新</p>
<p>如果你真的想用索引位置来做这件事,然后找到。那么您已经知道如何找到<code>@</code>的位置,并且知道如何通过指定起始索引来搜索<code>@</code>之后的第一个空间</p>
<p>find的文档指定它查找最低的索引。但是,我们可以使用<code>rfind</code>来查找最高的索引,即字符串中的最后一个事件</p>
<blockquote>
<p><strong>string.find</strong>(s, sub[, start[, end]]) Return the lowest index in s where
the substring sub is found such that sub is wholly contained in
s[start:end]. Return -1 on failure. Defaults for start and end and
interpretation of negative values is the same as for slices.</p>
<p><strong>string.rfind</strong>(s, sub[, start[, end]]) Like find() but find the highest
index</p>
</blockquote>
<p>所以使用rfind我们可以找到字符串中最后一个空格实例。如果我们传递0作为开始(因此从开始处开始),然后传递<code>@</code>的索引作为结束,那么它将找到字符串开始和<code>@</code>符号之间最后一个空格字符的索引。然后我们要加1,因为我们不需要空间的索引,而是后面的索引</p>
<pre class="lang-py prettyprint-override"><code>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])
</code></pre>
<p><strong>输出</strong></p>
<pre><code>myemail@gmail.com
</code></pre>