Имя: Пароль:
IT
Веб-мастеринг
Помогите написать регулярное выражение
🠗 (Волшебник 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
/(^|\s)(\.\bnet\b)(\s|$)/gm

https://regex101.com/r/6LRdPW/3
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
(23)
/[^\w\.]\.net\b/gm

https://regex101.com/r/t7RtbH/1
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+ лет опыта за плечами.
Проблемы невозможно решaть нa том же уровне компетентности, нa котором они возникaют. Альберт Эйнштейн