artur567297
РАБОТАЕТ НЕ ПРАВИЛЬНО НА ПРИМЕР: print(re.findall(r'(?<!7)\w+', ‘HISD 7BAS’)) – должна вернуть по сути слово HISD а возвращается полностью выражение HISD 7BAS
Она не возвращает полностью пыражение HISD 7BAS, как ты пишешь, потому что пробел не может входить в класс символов \w. Ты хоть научись сначала выводить всё правильно и точно.
Смотри, как это делается
>>> import re
>>>
>>> re.findall(r'(?<!7)\w+', 'HISD 7BAS')
['HISD', '7BAS']
>>>
Ты просто не знаешь, как работает функция re.findall().
А чтобы знать, сначал прочитай вот это вот всё
https://docs.python.org/3/library/re.htmlА потом уже приходи со своими умными идеями, написанными капслоком. Тебя ещё никогда нигде не банили за капслок не по делу? Скоро забанят, так что не обижайся потом.
artur567297
ПРИЧЕМ В javascript этот код отрабатывает правильно, проблема только в питоне.
Какой код в JavaScript отрабатывает правильно? Там такой функции нет даже.
artur567297
ЭТА ПРОВЕРКА РАБОТАЕТ ПРАВИЛЬНО НА ПРИМЕР: print(re.findall(r'\w+\s(?=one)', ‘zet ru is one to be ’)) – вернет только слово ‘is’ как и должно быть.
Она не возвращает is, а возвращает is с пробелом. У тебя опять что-то не высветилось и ты даже не понимаешь, что именно выводится на экран.
Смотри, как это делается
>>> import re
>>>
>>> re.findall(r'\w+\s(?=one)', 'zet ru is one to be ')
['is ']
>>>
artur567297
Негативная опережающая проверка ?!: X(?!Y) ищет X за которым НЕ следует Y. ЭТА ПРОВЕРКА РАБОТАЕТ НЕ ПРАВИЛЬНО НА ПРИМЕР: print(re.findall(r'\w+\s(?!one)', ‘zet ru is one to ’)) – вернет ‘zet ’, ‘ru ’, ‘one ’, ‘to ’ – ‘is’ не возвращается как и должно быть: НО ПОЧЕМУ ВОЗВРАШАЕТСЯ ‘one’ ОНО ВЕДЬ НЕ ДОЛЖНО ВЕРНУТЬСЯ В РЕЗУЛЬТАТ?
Ну, возвращается всё правильно
>>> import re
>>>
>>> re.findall(r'\w+\s(?!one)', 'zet ru is one to ')
['zet ', 'ru ', 'one ', 'to ']
>>>
А one возвращается потому, что это функция re.findall(). Так как последовательность символов one находится в подсматривающей группе, то она не учитывается как совпадение, поэтому и не возвращается функцией re.findall() в качестве чего-то найденного. А так как последовательность символов one не обозначена в качестве найденной или в которой вообще был поиск, то по ней следующий поиск начинается функцией re.findall(), потому что эта функция так работает. Когда функция re.findall() нашла что-то и вернула это или нашла и не вернула (как в данном случае), следующий поиск она продолжает с того места, где закончилось найденное и возвращённое или найденное и невозвращённое (как в данном случае) из неё значение. Если она следующий после is поиск начинает с one, то после one нет никакого второго one, поэтому она его и возвращает. Вот и всё.
Если ты говоришь, что прямая ищет без повторных поисков по one, то ничего подобного
>>> import re
>>>
>>> re.findall(r'\w+\s(?=one)', 'one one one one')
['one ', 'one ', 'one ']
>>>
Всё так же работает.