Greedy๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ฌธ์ œ๋ฅผ ํ’€ ๋•Œ ๋ณด์•˜๋˜ ์šฉ์–ด์ด๋‹ค. ์ด ์šฉ์–ด๋Š” ์–ด๋–ค ์˜๋ฏธ๋กœ ์‚ฌ์šฉ์ด ๋ ๊นŒ? ๋ฌด์–ธ๊ฐ€ ํƒ์š•์ ์œผ๋กœ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ผ ๊ฒƒ์ด๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฌธ์ž์—ด์—์„œ ์ฒ˜์Œ ๋‚˜์˜ค๋Š” tag๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  ์‹ถ๋‹ค ํ•ด๋ณด์ž.

>>> s = '<html><head><title>Title</title>'
>>> len(s)
32
>>> print(re.match('<.*>', s).span())
(0, 32)
>>> print(re.match('<.*>', s).group())
<html><head><title>Title</title>

<.*> ์ •๊ทœ์‹์˜ ๋งค์น˜ ๊ฒฐ๊ณผ๋กœ <html> ๋ฌธ์ž์—ด์„ ๋Œ๋ ค์ฃผ๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ–ˆ์ง€๋งŒ * ๋ฉ”ํƒ€ ๋ฌธ์ž๋Š” ๋งค์šฐ ํƒ์š•์Šค๋Ÿฌ์›Œ์„œ ๋งค์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ์ตœ๋Œ€ํ•œ์˜ ๋ฌธ์ž์—ด์ธ <html><head><title>Title</title> ๋ฌธ์ž์—ด์„ ๋ชจ๋‘ ์†Œ๋น„ํ•ด ๋ฒ„๋ ธ๋‹ค. ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ์ด ํƒ์š•์Šค๋Ÿฌ์›€์„ ์ œํ•œํ•˜๊ณ  <html> ๋ฌธ์ž์—ด๊นŒ์ง€๋งŒ ์†Œ๋น„ํ•˜๋„๋ก ๋ง‰์„ ์ˆ˜ ์žˆ์„๊นŒ?

๋‹ค์Œ๊ณผ ๊ฐ™์ด non-greedy ๋ฌธ์ž์ธ ?๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด *์˜ ํƒ์š•์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.

>>> print(re.match('<.*?>', s).group())
<html>

non-greedy ๋ฌธ์ž์ธ ?๋Š” *?, +?, ??, {m,n}?์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ€์žฅ ์ตœ์†Œํ•œ์˜ ๋ฐ˜๋ณต์„ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋„์™€์ฃผ๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

Reference