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: |

On Tuesday, some local media outlets included Sing Tao Daily cited sources as saying the Hong Kong government was considering restricting access to Telegram. Privacy Commissioner for Personal Data Ada Chung told to the Legislative Council on Monday that government officials, police and lawmakers remain the targets of “doxxing” despite a privacy law amendment last year that criminalised the malicious disclosure of personal information. But a Telegram statement also said: "Any requests related to political censorship or limiting human rights such as the rights to free speech or assembly are not and will not be considered." ZDNET RECOMMENDS Although some crypto traders have moved toward screaming as a coping mechanism, several mental health experts call this therapy a pseudoscience. The crypto community finds its way to engage in one or the other way and share its feelings with other fellow members. How to create a business channel on Telegram? (Tutorial)
from us


Telegram GitVerse News
FROM American