GITVERSENEWS Telegram 740
Решение задачки с regex 🚀

Друзья, на день программиста мы поделились с вами задачкой про regex. Видели в комментариях ваши варианты решения, спасибо за крутые идеи!

Теперь делимся нашим вариантом, а также показываем, как с этой задачей справился ИИ-ассистент GigaCode (скрин прилагается в посте 😉).

Итак, почему часть упоминаний не ловится?

В исходном коде использовался шаблон r"\b256-?й\b", который ищет «256», за которым следует опциональный ASCII-дефис (-, U+002D) и «й». Но в тексте встречаются разные Unicode-символы: обычный дефис, неразрывный дефис, en dash, em dash и другие. ASCII-дефис (-) не покрывает эти типографские варианты, поэтому часть совпадений теряется.

Решение в одну строчку:

Чтобы поймать все варианты «256-го» дня, нужно заменить -? на диапазон Unicode-символов, включающий все типы дефисов и тире. Вот исправленный код:

import re

text = (
"Сегодня 256-й день! Ура!\n"
"А у дизайнера типографика: 256-й день (NBSP-hyphen), 256–й (en dash), 256й без дефиса.\n"
"Ещё встретилось: 256–й, 256—й и даже 256-й в заголовке."
)

found = re.findall(r"\b256[\-\u2010-\u2015\u2212]?й\b", text, flags=re.IGNORECASE)
print(found) # ['256-й', '256-й', '256–й', '256й', '256—й', '256-й']

Что здесь происходит? 💡

\b256 — граница слова и число «256».

[\-\u2010-\u2015\u2212]? — опциональный символ из диапазона:

\- — ASCII hyphen-minus (U+002D).

\u2010-\u2015 — диапазон Unicode: HYPHEN (U+2010), NON-BREAKING HYPHEN (U+2011), FIGURE DASH (U+2012), EN DASH (U+2013), EM DASH (U+2014), HORIZONTAL BAR (U+2015).

\u2212 — MINUS SIGN (U+2212).

й\b — буква «й» и граница слова.

flags=re.IGNORECASE — игнорируем регистр.

Если у вас есть еще идеи или вопросы по regex, пишите в комментариях — обсудим!
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥632



tgoop.com/gitversenews/740
Create:
Last Update:

Решение задачки с regex 🚀

Друзья, на день программиста мы поделились с вами задачкой про regex. Видели в комментариях ваши варианты решения, спасибо за крутые идеи!

Теперь делимся нашим вариантом, а также показываем, как с этой задачей справился ИИ-ассистент GigaCode (скрин прилагается в посте 😉).

Итак, почему часть упоминаний не ловится?

В исходном коде использовался шаблон r"\b256-?й\b", который ищет «256», за которым следует опциональный ASCII-дефис (-, U+002D) и «й». Но в тексте встречаются разные Unicode-символы: обычный дефис, неразрывный дефис, en dash, em dash и другие. ASCII-дефис (-) не покрывает эти типографские варианты, поэтому часть совпадений теряется.

Решение в одну строчку:

Чтобы поймать все варианты «256-го» дня, нужно заменить -? на диапазон Unicode-символов, включающий все типы дефисов и тире. Вот исправленный код:

import re

text = (
"Сегодня 256-й день! Ура!\n"
"А у дизайнера типографика: 256-й день (NBSP-hyphen), 256–й (en dash), 256й без дефиса.\n"
"Ещё встретилось: 256–й, 256—й и даже 256-й в заголовке."
)

found = re.findall(r"\b256[\-\u2010-\u2015\u2212]?й\b", text, flags=re.IGNORECASE)
print(found) # ['256-й', '256-й', '256–й', '256й', '256—й', '256-й']

Что здесь происходит? 💡

\b256 — граница слова и число «256».

[\-\u2010-\u2015\u2212]? — опциональный символ из диапазона:

\- — ASCII hyphen-minus (U+002D).

\u2010-\u2015 — диапазон Unicode: HYPHEN (U+2010), NON-BREAKING HYPHEN (U+2011), FIGURE DASH (U+2012), EN DASH (U+2013), EM DASH (U+2014), HORIZONTAL BAR (U+2015).

\u2212 — MINUS SIGN (U+2212).

й\b — буква «й» и граница слова.

flags=re.IGNORECASE — игнорируем регистр.

Если у вас есть еще идеи или вопросы по regex, пишите в комментариях — обсудим!

BY GitVerse News




Share with your friend now:
tgoop.com/gitversenews/740

View MORE
Open in Telegram


Telegram News

Date: |

How to create a business channel on Telegram? (Tutorial) ‘Ban’ on Telegram Matt Hussey, editorial director of NEAR Protocol (and former editor-in-chief of Decrypt) responded to the news of the Telegram group with “#meIRL.” “Hey degen, are you stressed? Just let it all out,” he wrote, along with a link to join the group. To edit your name or bio, click the Menu icon and select “Manage Channel.”
from us


Telegram GitVerse News
FROM American