Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 23, 2023 22:25:21

artur567297
Зарегистрирован: 2023-10-22
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с регулярными выражениями с негативными проверками

ZerG
ну этот шаблон работает ^ а этот ?<! нет
если например мне нужно отобрать только слова начинающиеся с 7 тогда вот ?<=7 и все работает :
print(re.findall(r'(?<=7)\w+', ‘HISD 7BAS’))
а если наоборот нужно отобрать все слова которые начинаются не с семерки в справки сказано что символ ?<! для этого подходит а по факту нет
а вот это ^ оно будет не корректно работать здесь если указать ^\W7H - то есть больше одного символа:
re.findall(pattern, ‘HISD 7HAS’) - вообще не чего не вернет если нужно чтобы слова не начинались больше чем один символ.

А вы спецы нормально ответить не можите: можно с шаблоном (?<!Y)X который ищет совпадение с X при условии, что перед ним нет Y отобрать этот долбанный Х или нет - ПО ФАКТУ НЕТ или попробуйте отберите
или зачем тогда в справке написано “который ищет совпадение с X при условии, что перед ним нет Y ”????

Отредактировано artur567297 (Окт. 23, 2023 22:35:16)

Офлайн

#2 Окт. 24, 2023 01:43:21

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9845
Репутация: +  853  -
Профиль   Отправить e-mail  

Проблема с регулярными выражениями с негативными проверками

artur567297
Там пробел перед 7BAS. - так я могу поставить Y = \s7 все равно вернет 7BAS
Да ты не понимаешь регулярные выражения. Где ты их изучал?

Вот мы берём пример мой выше
  
>>> import re
>>> 
>>> re.findall(r'(?<!7)\w+', 'HISD 7BAS')
['HISD', '7BAS']
>>>

При поиске вот такой фигни
(?<!7)\w+
в вот такой строке
HISD 7BAS
что с чем совпадает в итоге на каждом шаге в функции?

Вот на первом поиске в функции они совпадают вот так:
(?<!7) \w+
пустая_строка HISD пробел 7BAS

На втором поиске в функции они совпадают вот так:
(?<!7) \w+
HISD пробел 7BAS
А ты думал что? что оно с H совпадает сначала, потому что H - это не семёрка? Вот ты заблуждаешься, оно не совпадает с H. Оно совпадает с пустотой, которая перед H стоит и показывает истину для этой пустоты, потому что эта пустота не равна символу семёрке (в пустоте нет символа), поэтому HISD и совпадает как подходящее.

Для тупорылых там написано это всё
(?<!…)

Matches if the current position in the string is not preceded by a match for …. This is called a negative lookbehind assertion. Similar to positive lookbehind assertions, the contained pattern must only match strings of some fixed length. Patterns which start with negative lookbehind assertions may match at the beginning of the string being searched.
Но ты по-английски читать не умеешь, поэтому для тебя мы сделаем исключение. Не будем тебя тупорылым называть, а просто покажем тебе, где это написано и что оно значит.

artur567297
а если наоборот нужно отобрать все слова которые начинаются не с семерки в справки сказано что символ ?<! для этого подходит а по факту нет
Да ты не шаришь просто в регулярных выражениях! С чего ты взял, что речь идёт про слова, начинающиеся с семёрки?! Речь идёт про слова, перед которыми семёрка стоит! Перед словом 7BAS никакой семёрки нет, там пробел стоит, и вот с ним, с этим пробелом, эта проверка и совпадает и показывает истину, потому что пробел - это не семёрка.

Если ты думаешь, что ты понял регулярные выражения, то ты глубоко заблуждаешься. Ты их не понял и неверно трактуешь сами эти выражения. Ты не понимаешь, как работают эти проверки, потому что их работа описана на английском, а ты по-английски читать не умеешь. И вот прежде чем заниматься программированием, иди и английский подтяни хотя бы до какого-то уровня. Иначе ты так и будешь всякую чушь молоть. Ну и прослывёшь просто дебилом каким-то и всё. А форумы потом закончатся и на всех этих форумах будут знать, что ты дебил. В телеграм-каналах будет всё то же самое. И вот тогда где ты будешь свои вопросы задавать? Под другим ником тебя всегда будут узнавать и сразу в игнор и бан отправлять без всяких выяснений. А в бане ты вопросы свои не поспрашиваешь. Так что подумай над этим.



Отредактировано py.user.next (Окт. 24, 2023 06:46:49)

Офлайн

#3 Окт. 24, 2023 08:14:35

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Проблема с регулярными выражениями с негативными проверками

py.user.next
Речь идёт про слова, перед которыми семёрка стоит! Перед словом 7BAS никакой семёрки нет, там пробел стоит, и вот с ним, с этим пробелом, эта проверка и совпадает и показывает истину, потому что пробел - это не семёрка.
Ты ему это написал уже примерно раза 4
Ну не понимает человек что пробел это такой же символ как и все остальные
Он видит эту строку как два слова
А компьютер видит ее как массив символов
Танкист карочеговоря



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#4 Окт. 24, 2023 18:01:06

artur567297
Зарегистрирован: 2023-10-22
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Проблема с регулярными выражениями с негативными проверками

py.user.next
Понял. Да все работает как написано в https://docs.python.org/3/library/re.html

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version