<p>假设您提供的代码块是一个长字符串,存储在一个名为<code>input_string</code>的变量中:</p>
<pre class="lang-py prettyprint-override"><code>name = re.search(r"(?<=name\=\')[\w\.]+?(?=\')", input_string).group(0)
versionName = re.search(r"(?<=versionName\=\')\d+?\.\d+?(?=\')", input_string).group(0)
permissions = re.findall(r'(?<=android\.permission\.)[A-Z_]+(?=\')', input_string)
</code></pre>
<p>说明:</p>
<h3>名称</h3>
<ul>
<li><code>(?<=name\=\')</code>:检查主字符串的<em>前进</em>,以便只返回以<code>name='</code>开头的字符串。在<code>=</code>和<code>'</code>前面的<code>\</code>用于转义它们,这样regex就知道我们在讨论<code>=</code>字符串,而不是regex命令。<code>name='</code>is<strong>not</strong>当我们得到结果时,我们只知道我们得到的结果前面都有它。在</li>
<li><code>[\w\.]+?</code>:这是我们要搜索的主字符串。<code>\w</code>表示任何字母数字字符和下划线。<code>\.</code>是一个转义句点,因此regex知道我们的意思是<code>.</code>,而不是由未转义句点表示的regex命令。把这些放在<code>[]</code>中意味着我们可以接受任何我们卡在括号里的东西,所以我们说我们接受任何字母数字字符,<code>_</code>,或{<cd12>}。<code>+</code>后话意味着前一个事物中的至少一个,意思是至少一个(但可能更多)的{<cd17>}。最后,<code>?</code>意味着<em>不要贪心</em>我们告诉regex获得满足这些规范的尽可能小的组,因为<code>+</code>可以无限重复<code>[\w\.]</code>匹配的任何内容。在</li>
<li><code>(?=\')</code>:检查主字符串后面的<em>以便只返回后跟<code>'</code>的字符串。<code>\</code>也是一个转义,因为否则regex或Python的字符串执行可能会误解<code>'</code>。最后一个<code>'</code>是<strong>不是</strong>与我们的结果一起返回的,我们只知道在原始字符串中,它跟在我们最终得到的任何结果之后。在</li>
</ul>