擅长:python、mysql、java
<p>根据您的要求,我会选择regex,原因很简单,因为它已经可以使用并经过测试,所以正如您所要求的那样,它是最简单的。你知道吗</p>
<p>在您的需求中,唯一“复杂”的事情是避免在<code>def</code>之后使用与<code>abc</code>之后相同的数字。
这可以通过<a href="https://stackoverflow.com/questions/8055727/negating-a-backreference-in-regular-expressions">negative backreference</a>实现。您可以使用的正则表达式是:</p>
<pre><code>\babc(\d+)_def((?!\1)\d{1,2})\b
</code></pre>
<ul>
<li><code>\b</code>捕获单词边界;如果将regex括在两个\b
将搜索限制为单词,即用空格分隔的文本,
标点符号等</li>
<li><code>abc</code>捕获字符串<code>abc</code></li>
<li><code>\d+</code>捕获一个或多个数字;如果您想要的位数有上限,则必须是<code>\d{1,MAX}</code>,其中MAX是您的最大位数;总之<code>\d</code>表示一个数字,<code>+</code>表示一个或多个重复</li>
<li><code>(\d+)</code>是一个组:使用括号将<code>\d+</code>定义为您希望在regex中“记住”的内容;它在某种程度上类似于定义一个变量;在本例中,<code>(\d+)</code>是您的第一个组,因为您在它之前没有定义任何其他组(即在它的左侧)</li>
<li><code>_def</code>捕获字符串<code>_def</code></li>
<li><code>(?!\1)</code>是你说“我不想重复<code>_def</code>之后的第一组。<code>\1</code>表示第一组,而(?)?!whatever)是一个检查,结果为正的是当前位置后面的内容不是(由<code>!</code>给出的否定)<code>whatever</code>您想要否定。你知道吗</li>
</ul>
<p>现场演示<a href="https://regex101.com/r/PhsFpU/2" rel="nofollow noreferrer">here</a>。你知道吗</p>