Выбор всего текста до определенного слова (регулярные выражения)
задача в следующем: Есть строки: "test/test/chars" "test/test" Как написать регулярное выражение, чтобы выделялось только "test/test" в обоих слуаях Я пробовал написать .*(?=/chars), но оно работает только в первом случае ("test/test/chars"), без chars оно не выделяет ничего. Язык программирования python Пробовал:
re.findall('.*(?=\/chars)', 'test/test')
re.findall('.*(?=\/chars)', 'test/test/chars')
Ответы (3 шт):
в вашем случае впереди надо искать либо /chars либо конец строки $
.*?(?=\/chars|$)
либо,
(.*?)(?>\/chars)?$
последнее дастат результат test/test для строки test/test/chars, но для строки test/tests/chars1 вернет всю строку целиком
Если "да, абсолютно любое слово(причем, может быть несколько слов через слэш). Главное чтобы на конце chars не выделялось, если оно есть – Антон Бондарь", тогда может проще chars вытолкнуть?
import re
s = 'test/test/chars'
result = re.sub(r'chars$', '', s)
print(result)
И это все тоже не очень... Если это (я предполагаю) часть http, может стоит просто разобрать по / , проверить последнее и если 'chars' - удалить последнее? Или если известно количество нужных "узлов", обрезать список по длине.
если вам известна подстрока до которой вы хотите выделить текст, то можно попробовать задать ее как переменную и тогда можно использовать, например, такую регулярку:
text = 'test/test/chars/chars2'
stop = 'char'
search(fr'(.+?){stop}', text).group(1)
результат:
'test/test/'