<p>你不需要这么复杂的正则表达式来否定输入中的<code>//</code>并捕获按顺序出现的汉字。对于丢弃包含<code>//</code>的行来说,这个<code>(?!.*//)</code>负向前看就足够了,对于捕获中文文本来说,您可以使用这个regex <code>[^\u4e00-\u9fff]*([\u4e00-\u9fff]+)</code>来捕获,您的整个regex变成这样</p>
<pre><code>^(?!.*//)[^\u4e00-\u9fff]*([\u4e00-\u9fff]+)
</code></pre>
<p>您可以从第一个分组模式中提取汉字。你知道吗</p>
<p><strong>以上正则表达式的解释:</strong></p>
<ul>
<li><code>^</code>-字符串开头</li>
<li><code>(?!.*//)</code>-如果<code>//</code>出现在前面任何一行中,则将丢弃匹配项的负向前看</li>
<li><code>[^\u4e00-\u9fff]*</code>-可选地匹配零个或多个非中文字符</li>
<li><code>([\u4e00-\u9fff]+)</code>-捕获一个或多个汉字,然后放入第一个分组模式。你知道吗</li>
</ul>
<p><strong><a href="https://regex101.com/r/kKjTbR/1" rel="nofollow noreferrer">Demo</a></strong></p>
<p><strong>编辑:下面是示例代码,显示如何从group1捕获文本</p>
<pre><code>import re
s = ' showToastByText("该功能暂未开放");'
m = re.search(r'^(?!.*//)[^\u4e00-\u9fff]*([\u4e00-\u9fff]+)',s)
if (m):
print(m.group(1))
</code></pre>
<p>指纹</p>
<pre><code>该功能暂未开放
</code></pre>
<p><a href="https://rextester.com/XOJ51658" rel="nofollow noreferrer">Online Python Demo</a></p>
<p><strong>编辑:用于提取注释中提到的多次出现的汉字</p>
<p>由于要提取多次出现的汉字,可以检查字符串是否不包含<code>//</code>,然后使用<code>findall</code>提取所有中文文本。下面是一个示例代码,演示了相同的</p>
<pre><code>import re
arr = ['showToastByText("该功能暂未开放");','//showToastByText("该功能暂未开放");','showToastByText("未开放");','showToastByText("该功能暂xxxxxx未开放");']
for s in arr:
if (re.match(r'\/\/', s)):
print(s, ' > contains // hence not finding')
else:
print(s, ' > ', re.findall(r'[\u4e00-\u9fff]+',s))
</code></pre>
<p>指纹</p>
<pre><code>showToastByText("该功能暂未开放"); > ['该功能暂未开放']
//showToastByText("该功能暂未开放"); > contains // hence not finding
showToastByText("未开放"); > ['未开放']
showToastByText("该功能暂xxxxxx未开放"); > ['该功能暂', '未开放']
</code></pre>
<p><a href="https://rextester.com/LSARS91027" rel="nofollow noreferrer">Online Python demo</a></p>