爱的逃兵 發表於 2025-7-2 08:56:57

正则表达式中常见的贪婪词有哪些举例详解

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li><a href="#_label0">1.&nbsp;*</a></li><li><a href="#_label1">2.&nbsp;+</a></li><li><a href="#_label2">3.&nbsp;?</a></li><li><a href="#_label3">4.&nbsp;{n,}</a></li><li><a href="#_label4">5.&nbsp;{n,m}</a></li><li><a href="#_label5">总结</a></li></ul></div><p class="maodian"><a name="_label0"></a></p><h2>1.&nbsp;*</h2>
<ul><li><strong>含义</strong>:匹配前面的元素零次或者多次。</li><li><strong>示例</strong>:对于正则表达式&nbsp;<code>a*</code>,在字符串&nbsp;<code>&quot;aaaa&quot;</code>&nbsp;中,它会匹配整个&nbsp;<code>&quot;aaaa&quot;</code>,因为它会尽可能多地匹配&nbsp;<code>a</code>&nbsp;字符。</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.&nbsp;+</h2>
<ul><li><strong>含义</strong>:匹配前面的元素一次或者多次。</li><li><strong>示例</strong>:正则表达式&nbsp;<code>a+</code>&nbsp;在字符串&nbsp;<code>&quot;aaaa&quot;</code>&nbsp;中,同样会匹配整个&nbsp;<code>&quot;aaaa&quot;</code>,不过它至少要匹配一次&nbsp;<code>a</code>&nbsp;字符。</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.&nbsp;?</h2>
<ul><li><strong>含义</strong>:匹配前面的元素零次或者一次。</li><li><strong>示例</strong>:正则表达式&nbsp;<code>colou?r</code>&nbsp;可以匹配&nbsp;<code>&quot;color&quot;</code>&nbsp;和&nbsp;<code>&quot;colour&quot;</code>,<code>u?</code>&nbsp;表示&nbsp;<code>u</code>&nbsp;这个字符可以出现零次或者一次。</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.&nbsp;{n,}</h2>
<ul><li><strong>含义</strong>:匹配前面的元素至少&nbsp;<code>n</code>&nbsp;次。</li><li><strong>示例</strong>:正则表达式&nbsp;<code>a{2,}</code>&nbsp;在字符串&nbsp;<code>&quot;aaaa&quot;</code>&nbsp;中,会匹配整个&nbsp;<code>&quot;aaaa&quot;</code>,因为它要求&nbsp;<code>a</code>&nbsp;至少出现 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.&nbsp;{n,m}</h2>
<ul><li><strong>含义</strong>:匹配前面的元素至少&nbsp;<code>n</code>&nbsp;次,但不超过&nbsp;<code>m</code>&nbsp;次。</li><li><strong>示例</strong>:正则表达式&nbsp;<code>a{2,3}</code>&nbsp;在字符串&nbsp;<code>&quot;aaaa&quot;</code>&nbsp;中,会匹配前三个&nbsp;<code>a</code>,即&nbsp;<code>&quot;aaa&quot;</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]
查看完整版本: 正则表达式中常见的贪婪词有哪些举例详解