Пропустить слеши в регулярном выражении, пока не найдётся определённая строка
Недавно я экспериментировал с regex. Тестировал на этом сайте, потом на Python. У меня есть следующее выражение:
^(Resources\/)*
Вот мои строки:
Resources/
Resources/hello
Resources/test
Resources/Resources/abc123
Resources/Hello
Resources/Resources/Resources/sup.txt
Resources/mods/Resources/Unknown.test/test.txt
Ожидаемый вывод:
Resources/
Resources/hello
Resources/test
Resources/abc123
Resources/Hello
Resources/sup.txt
Resources/mods/Unknown.test/test.txt
Полученный вывод:
Resources/
Resources/hello
Resources/test
Resources/Resources/abc123
Resources/Hello
Resources/Resources/Resources/sup.txt
Resources/mods/Resources/Unknown.test/test.txt
Я также пробовал изменять выражение:
^(Resources\/)*
Но результат был тот же самый.
Вот мой код Python:
from re import sub as regexsub
# ...
class ...:
resfold_nosep = 'Resources'
sep = '/'
# ...
def ...(...):
# ...
path = ...
regexsub("({}{}){2,}".format(self.resfold_nosep, sep), "", path, 1)
Мой вопрос: как сделать так, чтобы в строках заменялись все случаи появления Resources/?
Ответы (3 шт):
Автор решения: Stanislav Volodarskiy
→ Ссылка
import re
lst = '''
Resources/
Resources/hello
Resources/test
Resources/Resources/abc123
Resources/Hello
Resources/Resources/Resources/sup.txt
Resources/mods/Resources/Unknown.test/test.txt
'''.split()
for s in lst:
print(re.sub('/Resources', '', s), '<-', s)
Resources/ <- Resources/ Resources/hello <- Resources/hello Resources/test <- Resources/test Resources/abc123 <- Resources/Resources/abc123 Resources/Hello <- Resources/Hello Resources/sup.txt <- Resources/Resources/Resources/sup.txt Resources/mods/Unknown.test/test.txt <- Resources/mods/Resources/Unknown.test/test.txt
P.S. Namerek в комментарии правильно говорит что регулярное выражание не нужно. Достаточно простой замены:
for s in lst:
print(s.replace('/Resources', ''), '<-', s)
Автор решения: Maksim Alekseev
→ Ссылка
Без regex, как будто бы удобнее, но тут дело вкуса)
arr = ['Resources/',
'Resources/Hello',
'Resources/Resources/abc123',
'Resources/Resources/Resources/sup.txt',
'Resources/mods/Resources/Unknown.test/test.txt',]
for path in arr:
path = 'Resources/' + ''.join(path.split('Resources/'))
print(path)
Вывод:
Resources/
Resources/Hello
Resources/abc123
Resources/sup.txt
Resources/mods/Unknown.test/test.txt
Автор решения: Namerek
→ Ссылка
import re
text = """Resources/
Resources/hello
Resources/test
Resources/Resources/abc123
Resources/Hello
Resources/Resources/Resources/sup.txt
Resources/mods/Resources/Unknown.test/test.txt"""
print(
re.sub(r'(?<!^)Resources/', '', text, flags=re.M)
)
Resources/
Resources/hello
Resources/test
Resources/abc123
Resources/Hello
Resources/sup.txt
Resources/mods/Unknown.test/test.txt