正则表达式中常见的贪婪词有哪些举例详解
<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">1. *</a></li><li><a href="#_label1">2. +</a></li><li><a href="#_label2">3. ?</a></li><li><a href="#_label3">4. {n,}</a></li><li><a href="#_label4">5. {n,m}</a></li><li><a href="#_label5">总结</a></li></ul></div><p class="maodian"><a name="_label0"></a></p><h2>1. *</h2><ul><li><strong>含义</strong>:匹配前面的元素零次或者多次。</li><li><strong>示例</strong>:对于正则表达式 <code>a*</code>,在字符串 <code>"aaaa"</code> 中,它会匹配整个 <code>"aaaa"</code>,因为它会尽可能多地匹配 <code>a</code> 字符。</li><li><strong>代码示例(Python)</strong>:</li></ul>
<div class="jb51code"><pre class="brush:py;">import re
text = "aaaa"
pattern = re.compile(r'a*')
result = pattern.search(text)
print(result.group())# 输出: aaaa</pre></div>
<p class="maodian"><a name="_label1"></a></p><h2>2. +</h2>
<ul><li><strong>含义</strong>:匹配前面的元素一次或者多次。</li><li><strong>示例</strong>:正则表达式 <code>a+</code> 在字符串 <code>"aaaa"</code> 中,同样会匹配整个 <code>"aaaa"</code>,不过它至少要匹配一次 <code>a</code> 字符。</li><li><strong>代码示例(Python)</strong>:</li></ul>
<div class="jb51code"><pre class="brush:py;">import re
text = "aaaa"
pattern = re.compile(r'a+')
result = pattern.search(text)
print(result.group())# 输出: aaaa</pre></div>
<p class="maodian"><a name="_label2"></a></p><h2>3. ?</h2>
<ul><li><strong>含义</strong>:匹配前面的元素零次或者一次。</li><li><strong>示例</strong>:正则表达式 <code>colou?r</code> 可以匹配 <code>"color"</code> 和 <code>"colour"</code>,<code>u?</code> 表示 <code>u</code> 这个字符可以出现零次或者一次。</li><li><strong>代码示例(Python)</strong>:</li></ul>
<div class="jb51code"><pre class="brush:py;">import re
text1 = "color"
text2 = "colour"
pattern = re.compile(r'colou?r')
result1 = pattern.search(text1)
result2 = pattern.search(text2)
print(result1.group())# 输出: color
print(result2.group())# 输出: colour</pre></div>
<p class="maodian"><a name="_label3"></a></p><h2>4. {n,}</h2>
<ul><li><strong>含义</strong>:匹配前面的元素至少 <code>n</code> 次。</li><li><strong>示例</strong>:正则表达式 <code>a{2,}</code> 在字符串 <code>"aaaa"</code> 中,会匹配整个 <code>"aaaa"</code>,因为它要求 <code>a</code> 至少出现 2 次。</li><li><strong>代码示例(Python)</strong>:</li></ul>
<div class="jb51code"><pre class="brush:py;">import re
text = "aaaa"
pattern = re.compile(r'a{2,}')
result = pattern.search(text)
print(result.group())# 输出: aaaa</pre></div>
<p class="maodian"><a name="_label4"></a></p><h2>5. {n,m}</h2>
<ul><li><strong>含义</strong>:匹配前面的元素至少 <code>n</code> 次,但不超过 <code>m</code> 次。</li><li><strong>示例</strong>:正则表达式 <code>a{2,3}</code> 在字符串 <code>"aaaa"</code> 中,会匹配前三个 <code>a</code>,即 <code>"aaa"</code>,因为它尽量在 2 到 3 次的范围内进行最大匹配。</li><li><strong>代码示例(Python)</strong>:</li></ul>
<div class="jb51code"><pre class="brush:py;">import re
text = "aaaa"
pattern = re.compile(r'a{2,3}')
result = pattern.search(text)
print(result.group())# 输出: aaa</pre></div>
<p>贪婪字符会尽可能多地去匹配符合条件的字符,直到无法再匹配为止,因此会导致回溯问题,因此在实际应用中,应该避免使用贪婪字符。</p>
<p>如果想让贪婪字符变为非贪婪模式,只需在其后加上 ? 即可,如:<code>*?</code>、<code>+?</code>、<code>??</code>、<code>{n,}?</code>、<code>{n,m}?,</code></p>
<p>此模式将会尽可能少的去匹配字符,但是可能无法达到预期结果,大家酌情选择。</p>
<p class="maodian"><a name="_label5"></a></p><h2>总结</h2>
頁:
[1]