Вы уверены, что правильно интерпретировали документацию re.sub ?
blockquote>
*?
,+?
,??
«» , '+' и '?' квалификаторы все жадные; они соответствуют как можно большему количеству текста. Иногда такое поведение нежелательно; если RE & lt;. > сопоставляется с'
, он будет соответствовать всей строке, а не толькоtitle
''
. Добавление '?' после того, как квалификатор делает его исполнением в неживой или минимальной форме; как можно меньше символов. С помощью .*? в предыдущем выражении будет соответствовать только ''.'
Добавление
?
превратит выражение в неживое.Greedy:
re.sub(".*", "-", "abc")
non-Greedy:
re.sub(".*?", "-", "abc")
Обновление: FWIW
re.sub
делает именно то, что он должен:>>> from re import sub >>> sub(".*?", "-", "abc") '-a-b-c-' >>> sub(".*", "-", "abc") '-'
См. удивительный ответ @ BrenBarn о том, почему вы get
-a-b-c-
:)Вот визуальное представление о том, что происходит:
.*?
[/g3]
Я не уверен, есть ли простой способ закодировать это, но общий ответ будет использовать командлет Get-ChildItem.
"Командлет Get-ChildItem получает элементы в одном или более определенные местоположения.Если элемент является контейнером, он получает элементы внутри контейнера, известные как дочерние элементы. Вы можете использовать параметр -Recurse для получения элементов во всех дочерних контейнерах и использовать параметр -Depth для ограничения количества уровней для рекурсии. "
Используя Get-ChildItem, вы можете получить список файлов, находящихся в обоих каталогах, а затем сравнить их, чтобы узнать, имеют ли они одно и то же имя. Затем создайте аргумент if () на основе критериев, которые вы хотите использовать для их сравнения.
Это не полный ответ, но это хорошая отправная точка.
Спасибо всем за подачу, очень благодарен!
Я перешел на маршрут командного файла и создал для достижения моей цели следующее:
@echo off
setlocal
set _source="C:\users\user1\desktop\source"
set _dest="C:\users\user1\desktop\dest"
robocopy %_source% %_dest% *.bak /mir /XC /XN /XO
Любое мнение на этом скрипте рекомендуется!