|   |   | 
| 
 | Помогите написать регулярное выражение ↓ (Волшебник 18.11.2024 08:32) | ☑ | ||
|---|---|---|---|---|
| 0
    
        Грю 15.11.24✎ 18:30 | 
        Решил попробовать изучить что-то новое, регулярные выражения.
 Хочу найти слово целиком с помощью регулярки, но у меня что-то не получается. Вот эта: \bТутСлово\b работает на всем, кроме слова .net Например, оно присутствует в строке: Full-Stack Developer (Angular, .net Core, SQL) Как бы сделать? Кто знает? | |||
| 1
    
        realptrm 15.11.24✎ 06:44 | 
        \.net
 или (?i)\.net если не важен регистр | |||
| 2
    
        Грю 15.11.24✎ 07:06 | 
        (1) Нужно слово целиком. Иначе найдет всякие .network, а это не нужно.     | |||
| 3
    
        vbus 15.11.24✎ 07:28 | 
        \.net  https://regex101.com/r/hsnceF/1 | |||
| 4
    
        osa1C 15.11.24✎ 07:49 | 
        (2) Пробел в конце поставь, а если серьезно, то \b.net\b
 \b граница слова, например: \bsun\b — найдет sun, но не sunny Тут только не знаю как на точку отреагирует. По идее точка - это любой символ, но в теге \b \b может будет считать за символ "точка" https://www.about1c.ru/v83/language-reference/regexp | |||
| 5
    
        dmt 15.11.24✎ 07:41 | 
        (0) 
 Для поиска всех слов, содержащих ".net" целиком, можно использовать следующее регулярное выражение: ``` \b\w*\.net\w*\b ``` ### Объяснение: - `\b` — обозначает границу слова. - `\w*` — соответствует любому количеству букв, цифр или символов подчеркивания (`_`) перед `.net`. - `\.net` — ищет точную последовательность символов `.net`, где точка экранируется символом обратного слэша (`\`), чтобы избежать ее трактовки как специального символа. - `\w*` — соответствует любому количеству букв, цифр или символов подчеркивания после `.net`. - Вторая граница слова `\b` завершает поиск. Таким образом, данное регулярное выражение найдет все слова, содержащие ".net". | |||
| 6
    
        dmt 15.11.24✎ 07:44 | 
        Для поиска слова ".net", которое отделено пробелами или знаками препинания, можно использовать границы слова (`\b`). Вот пример регулярного выражения:
 ```python import re pattern = r'\b\.net\b' def contains_word_dot_net(string): return bool(re.search(pattern, string)) # Примеры использования print(contains_word_dot_net("example .net is great")) # True print(contains_word_dot_net("example.net is great")) # False print(contains_word_dot_net("no match here")) # False ``` ### Объяснение: - `r'\b\.net\b'`: Регулярное выражение включает в себя границы слова (`\b`), которые гарантируют, что найденное совпадение является отдельным словом. Внутри границ находится шаблон `\.` и `net`, где точка экранирована символом обратного слэша (`\`), чтобы она воспринималась буквально. - Функция `re.search()` ищет первое совпадение шаблона в строке. Если совпадение найдено, возвращается объект совпадения, иначе — `None`. - `bool(re.search(...))` преобразует результат поиска в булево значение: `True`, если совпадение найдено, и `False` в противном случае. Такое регулярное выражение гарантирует, что найдётся именно отдельное слово ".net", а не часть другого слова или строки. | |||
| 7
    
        AlexKimp 15.11.24✎ 07:44 | 
        (2) например? ваще не врубаюсь. .net непременно в конце или после t любой символ, кроме a-zA-Z?     | |||
| 8
    
        toypaul 15.11.24✎ 08:09 | 
        (7) с обеих сторон пробел или другой разделитель     | |||
| 9
    
        toypaul 15.11.24✎ 08:10 | 
        + (8) начало и конец строки тоже разделитель     | |||
| 10
    
        Грю 15.11.24✎ 08:51 | 
        (3) Находит часть слова .network: https://regex101.com/r/RUZk7a/1     | |||
| 11
    
        Грю 15.11.24✎ 08:41 | 
        (4) Не работает: https://regex101.com/r/6LRdPW/1     | |||
| 12
    
        Грю 15.11.24✎ 08:43 | 
        (6) Не работает: https://regex101.com/r/hLmS1o/1     | |||
| 13
    
        Грю 15.11.24✎ 08:58 | 
        (7) Да.
 .net - это должно быть законченное слово, не .network и не zaicev.net Перед ним и после него не должно быть сразу букв и цифр. Вот как (4) про sun правильно писал, только вместо sun должно быть .net \bsun\b — найдет sun, но не sunny | |||
| 14
    
        osa1C 15.11.24✎ 09:15 | ||||
| 15
    
        osa1C 15.11.24✎ 09:23 | 
        (13) Пробел в конце сработал, .network и zaicev.net не нашел,
 а .net нашел | |||
| 16
    
        hiddi 15.11.24✎ 09:26 | 
        \.net\b     | |||
| 17
    
        osa1C 15.11.24✎ 09:27 | 
        (16) Вот, кстати!!! Работает     | |||
| 18
    
        vbus 15.11.24✎ 09:35 | ||||
| 19
    
        hiddi 15.11.24✎ 09:30 | 
        (16) сорри \B\.net\b     | |||
| 20
    
        osa1C 15.11.24✎ 09:42 | 
        \B\.net\b - работает 
 \b\.net\b - не работает В чем различие между БОЛЬШОЙ "B" и маленькой "b"? | |||
| 21
    
        hiddi 15.11.24✎ 09:53 | 
        (20) \B - non-word boundary     | |||
| 22
    
        hiddi 15.11.24✎ 10:28 | 
        (12) вот и верь чатужпт )     | |||
| 23
    
        Timon1405 15.11.24✎ 14:52 | 
        (19) найдет ".net" в "..net" а не должно     | |||
| 24
    
        Garykom 15.11.24✎ 15:16 | 
        (5) чатгпт?
 кстати для подобных задач он хорош на практике надо подумать как задавать множество (разделитель или признак) начала слова и его конца пример "тут разная хрень \r\n.net, а потом хрень продолжается" | |||
| 25
    
        Волшебник 15.11.24✎ 15:20 | ||||
| 26
    
        Грю 15.11.24✎ 16:29 | 
        (15) А если там будет не пробел, а конец строки?     | |||
| 27
    
        Грю 15.11.24✎ 16:33 | 
        (18) Неплохо. Но первое \b лишнее, и (\s|$) тоже лишнее.     | |||
| 28
    
        Грю 15.11.24✎ 16:40 | 
        (25) Не работает на первом .net https://regex101.com/r/xXN1vj/1     | |||
| 29
    
        Грю 15.11.24✎ 16:54 | 
        (19) Это неочевидно, но оказалось, что работает. Прикольно.
 (23) А может, пусть найдет? Вроде, ничего страшного. Скажу что так и было задумано. И такой случай маловероятен, если только опечатка возникнет. | |||
| 30
    
        Волшебник 15.11.24✎ 17:05 | 
        (28) и хрен с ним. Первое .net искать не надо     | |||
| 31
    
        hiddi 15.11.24✎ 17:27 | 
        (23) ну, добавь еще (?<!\.)\B\.net\b     | |||
| 32
    
        Грю 15.11.24✎ 18:17 | 
        (30) Надо, потому что строка может быть разбита на подстроки, и .net в середине строки может оказаться в начале подстроки. Это HTML, из которого был извлечен текст. Например, вот такой может быть:
 Full-Stack Developer (<span>Angular</span>, <span>.net Core</span>) | |||
| 33
    
        Грю 15.11.24✎ 18:22 | 
        Итого, этот вариант вроде полностью рабочий: (^|\s)\.net\b
 Этот подходит, но с натяжкой: \B\.net\b Два решения сделали, молодцы! | |||
| 34
    
        Грю 15.11.24✎ 18:41 | 
        Нужно усложнить задачу. Регулярка должна быть универсальная. Если вместо .net будет другое слово, то она тоже должна работать. Например, нужно найти много разных подстрок, такие как: cat, dog, \.net, java, angular, и т.д.
 Подставляем их в ту же регулярку, и она их находит в строке. Остается тогда только этот вариант: (^|\s)\.net\b Потому что \B\.net\b перестает работать ЗЫ: .net можно заранее задать с обратным слешем, чтобы проще было. | |||
| 35
    
        novichok79 15.11.24✎ 18:45 | 
        pattern:=strings.Join([]string{`(^|\s)`, regexp.QuoteMeta(".net"), `\b`}, "")
 re, err := regexp.Compile(pattern) | |||
| 36
    
        Грю 15.11.24✎ 18:46 | 
        Короче, сделал проще! Вместо .net в поиск подставляю просто net, и все работает нормально с самой простой регуляркой: \bТутСлово\b
 Ура! | |||
| 37
    
        Грю 15.11.24✎ 18:49 | 
        (35) Отлично, прям все предусмотрено. Что это за язык? Питон или Го какой-нибудь?     | |||
| 38
    
        novichok79 15.11.24✎ 18:50 | 
        (37) прошел собес в ВК когда-то, где надо было писать регулярки на память (слава боженьке без positive, negative look-ahead, behind) без regex101.com.
 обращайтесь. | |||
| 39
    
        Грю 15.11.24✎ 18:52 | 
        Сам нашел, Го оказывается:
  | |||
| 40
    
        novichok79 15.11.24✎ 18:54 | 
        (39) да, это Golang. я сейчас работаю старшим golang инженером.
 в остальных ЯП была бы похожая конструкция, зависит от стандарта поддерживаемых регулярок. в golang нету тех самых positive negative look-ahead, так как это может повесить программу. а в Java есть и там можно регуляркой повесить сервис. | |||
| 41
    
        Грю 15.11.24✎ 19:06 | 
        (40) Круто! Сколько платят?     | |||
| 42
    
        novichok79 15.11.24✎ 19:50 | 
        (41) много, от 500 до 550 тыр на руки.     | |||
| 43
    
        Грю 15.11.24✎ 19:53 | 
        (42) Реально, много. Вот это я понимаю, хорошая работа.     | |||
| 44
    
        novichok79 15.11.24✎ 19:57 | 
        (43) надо уметь себя продать.     | |||
| 45
    
        osa1C 15.11.24✎ 20:11 | 
        (36) прикольно. Я тебе это ещё в (4) писал     | |||
| 46
    
        Грю 16.11.24✎ 00:16 | 
        (45) ты предлагал убрать точку? Пардонище, что-то не видел.     | |||
| 47
    
        osa1C 16.11.24✎ 04:46 | 
        (46) Убрать не предлагал, но про то, что из-за точки конструкция непонятно как себя поведет писал     | |||
| 48
    
        Грю 16.11.24✎ 07:23 | 
        (47) Я из-за нее создавал эту тему.     | |||
| 49
    
        Грю 17.11.24✎ 01:10 | 
        Друзья, я тут подумал, и решил что вариант (^|\s)\.net\b не подходит, потому что вместе с .net он находит еще и пробел, который стоит перед точкой. Это не будет работать если рядом две искомых подстроки.
 Вот такой вариант более универсальный и правильный: (?<=\W|^)\.net(?=\W|$) https://regex101.com/r/sLpLVa/1 Всем спасибо, сам разобрался. Темку можно закрыть. | |||
| 50
    
        Кирпич 16.11.24✎ 22:09 | 
        (49) в 1с такое не прокатит. И в других тоже не во всех. В питоне кажись и в go фокуса с просмотром вперед и назад нету.     | |||
| 51
    
        Грю 17.11.24✎ 01:07 | 
        (50) Без фокуса тогда как сделать можно? Циклом если только.     | |||
| 52
    
        Грю 18.11.24✎ 06:15 | 
        Отменяется требование найти .net
 Достаточно просто net Как оказалось, некоторые рукожопы пишут . Net через пробел или вообще Dot Net! А иногда встречается слово ASP.NET Так что снова упрощаю задачу до проще некуда. Всем спасибо, темку можно грохнуть. | |||
| 53
    
        Волшебник 18.11.24✎ 08:53 | 
        (52) работу ищешь? изучай 1С, тогда работа сама тебя найдёт     | |||
| 54
    
        Грю 18.11.24✎ 17:27 | 
        Искал, но сейчас это нереально, забил до весны. К концу года работодатели снизили найм, многие вакансии планируют закрыть только в январе, вообще не торопятся, отвечают по месяцу, соискателей тысячи на одно место. Вот реальный пример:       А 1С я и так хорошо знаю, 15+ лет опыта за плечами. | 
| Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |