Обратите внимание, что {1,255}
является жадным квантификатором и будет соответствовать как можно большему числу символов, вам необходимо добавить ?
после него.
Однако, просто используя ленивый {1,255}?
выигранный квантификатор ' решить проблему. Вам нужно определить, где должен закончиться матч. Похоже, вы хотите сопоставлять эти URL-адреса только тогда, когда за расширением сразу следует пробел или конец строки.
Следовательно, используйте
fp_pattern = r"file:///.{1,255}?\.\w{3,4}(?!\S)"
См. Демонстрационную версию regex
Отрицательный запрос (?!\S)
провалит любое совпадение, если непосредственно справа от текущего местоположения есть непробельный символ. .{1,255}?
будет соответствовать любому от 1 до 255 символов, как можно меньше.
Использовать в Python как
re.sub(fp_pattern, "*IGOTREPLACED*", text, flags=re.S)
Флаг re.MULTILINE
(re.M
) только переопределяет поведение привязки ^
и $
, делая их соответствующими началу / концу строк , а не вся строка. Флаг re.S
позволяет .
соответствовать любым символам, включая символы разрыва строки.
Пожалуйста, никогда не используйте (\w|\W){1,255}?
, используйте .{1,255}?
с флагом re.S
, чтобы соответствовать любому символу, иначе производительность будет убывать.