擅长:python、mysql、java
<p>似乎您正在尝试匹配以<code>@</code>开头的字符串,然后是0+个单词字符,然后是<code>handle</code>,然后是0+个单词字符。在</p>
<p>使用</p>
<pre><code>r'@\w*handle\w*'
</code></pre>
<p>或者-为了避免在电子邮件中匹配<code>@</code>+个字符:</p>
^{pr2}$
<p>请参见<a href="https://regex101.com/r/jW4xL1/1" rel="nofollow">Regex 1 demo</a>和<a href="https://regex101.com/r/jW4xL1/2" rel="nofollow">Regex 2 demo</a>(非单词边界要求非单词字符或字符串的开头位于<code>@</code>之前)。在</p>
<p>注意,<code>.*</code>是一个贪婪的点匹配模式,它尽可能多地匹配除换行符以外的任何字符。<code>\w*</code>只匹配0+个字符(也尽可能多地匹配),但是如果没有使用<code>re.UNICODE</code>标志(在代码中也没有使用),则从<code>[a-zA-Z0-9_]</code>集中匹配。在</p>
<p><a href="http://ideone.com/T1bZx4" rel="nofollow">Python demo</a>:</p>
<pre><code>import re
p = re.compile(r'@\w*handle\w*')
test_str = "@handle what is your problem?\nwhat is your problem @handle?\n@123handle what is your problem @handle123?\n"
print(p.findall(test_str))
# => ['@handle', '@handle', '@123handle', '@handle123']
</code></pre>