{"id":3175,"date":"2021-11-30T04:27:05","date_gmt":"2021-11-30T04:27:05","guid":{"rendered":"https:\/\/www.pythontutorial.net\/?page_id=3175"},"modified":"2021-12-03T08:09:13","modified_gmt":"2021-12-03T08:09:13","slug":"python-regex-non-greedy","status":"publish","type":"page","link":"https:\/\/www.pythontutorial.net\/python-regex\/python-regex-non-greedy\/","title":{"rendered":"Python Regex Non-Greedy"},"content":{"rendered":"\n<p><strong>Summary<\/strong>: in this tutorial, you&#8217;ll learn about the regex non-greedy (or lazy) quantifiers that match their preceding elements as few times as possible.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id='introduction-to-the-regex-non-greedy-or-lazy-quantifiers'>Introduction to the regex non-greedy (or lazy) quantifiers <a href=\"#introduction-to-the-regex-non-greedy-or-lazy-quantifiers\" class=\"anchor\" id=\"introduction-to-the-regex-non-greedy-or-lazy-quantifiers\" title=\"Anchor for Introduction to the regex non-greedy (or lazy) quantifiers\">#<\/a><\/h2>\n\n\n\n<p><a href=\"https:\/\/www.pythontutorial.net\/python-regex\/python-regex-quantifiers\/\">Quantifiers<\/a> allow you to match their preceding elements a number of times. Quantifiers work in one of two modes: <a href=\"https:\/\/www.pythontutorial.net\/python-regex\/python-regex-greedy\/\">greedy<\/a> and non-greedy (lazy).<\/p>\n\n\n\n<p>When quantifiers work in the greedy mode, they are called greedy quantifiers. Similarly, when quantifiers work in the non-greedy mode, they&#8217;re called non-greedy quantifiers or lazy quantifiers.<\/p>\n\n\n\n<p>By default, quantifiers work in the greedy mode. It means the greedy quantifiers will match their preceding elements as much as possible to return to the biggest match possible.<\/p>\n\n\n\n<p>On the other hand, the non-greedy quantifiers will match as little as possible to return the smallest match possible. non-greedy quantifiers are the opposite of greedy ones.<\/p>\n\n\n\n<p>To turn greedy quantifiers into non-greedy quantifiers, you add an extra question mark (<code>?<\/code>) to the quantifiers. The following table shows the greedy and their corresponding non-greedy quantifiers:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Greedy quantifier<\/th><th>Lazy quantifier<\/th><th>Meaning<\/th><\/tr><\/thead><tbody><tr><td><code>*<\/code><\/td><td><code>*?<\/code><\/td><td>Match its preceding element zero or more times.<\/td><\/tr><tr><td><code>+<\/code><\/td><td><code>+?<\/code><\/td><td>Match its preceding element one or more times.<\/td><\/tr><tr><td><code>?<\/code><\/td><td><code>??<\/code><\/td><td>Match its preceding element zero or one time.<\/td><\/tr><tr><td><code>{<\/code>&nbsp;<em>n<\/em>&nbsp;<code>}<\/code><\/td><td><code>{<\/code>&nbsp;<em>n<\/em>&nbsp;<code>}?<\/code><\/td><td>Match its preceding element exactly&nbsp;<em>n<\/em>&nbsp;times.<\/td><\/tr><tr><td><code>{<\/code>&nbsp;<em>n<\/em>&nbsp;<code>,}<\/code><\/td><td><code>{<\/code>&nbsp;<em>n<\/em>&nbsp;<code>,}?<\/code><\/td><td>Match its preceding element at least&nbsp;<em>n<\/em>&nbsp;times.<\/td><\/tr><tr><td><code>{<\/code>&nbsp;<em>n<\/em>&nbsp;<code>,<\/code>&nbsp;<em>m<\/em>&nbsp;<code>}<\/code><\/td><td><code>{<\/code>&nbsp;<em>n<\/em>&nbsp;<code>,<\/code>&nbsp;<em>m<\/em>&nbsp;<code>}?<\/code><\/td><td>Match its preceding element from&nbsp;<em>n<\/em>&nbsp;to&nbsp;<em>m<\/em>&nbsp;times.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id='python-regex-non-greedy-quantifiers-example'>Python regex non-greedy quantifiers example <a href=\"#python-regex-non-greedy-quantifiers-example\" class=\"anchor\" id=\"python-regex-non-greedy-quantifiers-example\" title=\"Anchor for Python regex non-greedy quantifiers example\">#<\/a><\/h2>\n\n\n\n<p>The following program uses the non-greedy quantifier (<code>+?<\/code>) to match the text within the quotes (<code>\"\"<\/code>) of a button element:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-keyword\">import<\/span> re\n\ns = <span class=\"hljs-string\">'&lt;button type=\"submit\" class=\"btn\"&gt;Send&lt;\/button&gt;'<\/span>\n\npattern = <span class=\"hljs-string\">'\".+?\"'<\/span>\nmatches = re.finditer(pattern, s)\n\n<span class=\"hljs-keyword\">for<\/span> match <span class=\"hljs-keyword\">in<\/span> matches:\n    print(match.group())\n<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>Output:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"Python\" data-shcb-language-slug=\"python\"><span><code class=\"hljs language-python\"><span class=\"hljs-string\">\"submit\"<\/span>\n<span class=\"hljs-string\">\"btn\"<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">Python<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">python<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\" id='summary'>Summary <a href=\"#summary\" class=\"anchor\" id=\"summary\" title=\"Anchor for Summary\">#<\/a><\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Non-greedy quantifiers match their preceding elements as little as possible to return the smallest possible match.<\/li><li>Add a question mark (?) to a quantifier to turn it into a non-greedy quantifier.<\/li><\/ul>\n<div class=\"helpful-block-content\" data-title=\"\">\n\t<header>\n\t\t<div class=\"wth-question\">Was this tutorial helpful ?<\/div>\n\t\t<div class=\"wth-thumbs\">\n\t\t\t<button\n\t\t\t\tdata-post=\"3175\"\n\t\t\t\tdata-post-url=\"https:\/\/www.pythontutorial.net\/python-regex\/python-regex-non-greedy\/\"\n\t\t\t\tdata-post-title=\"Python Regex Non-Greedy\"\n\t\t\t\tdata-response=\"1\"\n\t\t\t\tclass=\"wth-btn-rounded wth-yes-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\tclass=\"feather feather-thumbs-up block w-full h-full\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M14 9V5a3 3 0 0 0-3-3l-4 9v11h11.28a2 2 0 0 0 2-1.7l1.38-9a2 2 0 0 0-2-2.3zM7 22H4a2 2 0 0 1-2-2v-7a2 2 0 0 1 2-2h3\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> Yes <\/span>\n\t\t\t<\/button>\n\n\t\t\t<button\n\t\t\t\tdata-response=\"0\"\n\t\t\t\tdata-post=\"3175\"\n\t\t\t\tdata-post-url=\"https:\/\/www.pythontutorial.net\/python-regex\/python-regex-non-greedy\/\"\n\t\t\t\tdata-post-title=\"Python Regex Non-Greedy\"\n\t\t\t\tclass=\"wth-btn-rounded wth-no-btn\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http:\/\/www.w3.org\/2000\/svg\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M10 15v4a3 3 0 0 0 3 3l4-9V2H5.72a2 2 0 0 0-2 1.7l-1.38 9a2 2 0 0 0 2 2.3zm7-13h2.67A2.31 2.31 0 0 1 22 4v7a2.31 2.31 0 0 1-2.33 2H17\"\n\t\t\t\t\t><\/path>\n\t\t\t\t<\/svg>\n\t\t\t\t<span class=\"sr-only\"> No <\/span>\n\t\t\t<\/button>\n\t\t<\/div>\n\t<\/header>\n\n\t<div class=\"wth-form hidden\">\n\t\t<div class=\"wth-form-wrapper\">\n\t\t\t<div class=\"wth-title\"><\/div>\n\t\t\t<textarea class=\"wth-message\"><\/textarea>\n\t\t\t<input type=\"button\" name=\"wth-submit\" class=\"wth-btn wth-btn-submit\" id=\"wth-submit\" \/>\n\t\t\t<input type=\"button\" class=\"wth-btn wth-btn-cancel\" value=\"Cancel\" \/>\n\t\t<\/div>\n\t<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>In this tutorial, you&#8217;ll learn about Python regex non-greedy (or lazy) quantifiers that match their preceding elements as few times as possible.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":3122,"menu_order":6,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-3175","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/3175","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/comments?post=3175"}],"version-history":[{"count":0,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/3175\/revisions"}],"up":[{"embeddable":true,"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/pages\/3122"}],"wp:attachment":[{"href":"https:\/\/www.pythontutorial.net\/wp-json\/wp\/v2\/media?parent=3175"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}