Соответствие символов до последнего обратного слеша с помощью регулярных выражений - PullRequest
0 голосов
/ 05 июля 2011

Я пытаюсь создать проект Delphi по переименованию файлов, и я каким-то образом нашел регулярное выражение, соответствующее всем символам после последняя обратная косая черта для имен файлов: [^\\]+$ по этому адресу: МожетВы читаете в обратном порядке в регулярных выражениях? .Но я не смог найти код регулярного выражения, который соответствовал бы всем символам ДО последней обратной косой черты (для имен путей).

Я нашел следующий пример, но не смог изменить его для обратных косых черт и всех символов.[^/]+(?=/[^/]+$) Сопоставить имя папки из URL с помощью регулярных выражений

  • Я использую Delphi 2010

  • Мой механизм регулярных выраженийнаправленное на регулярное выражение (NFA)

  • Мой пример строки
    D:\belgelerD\delphi_projects_renamer\12\test_files\Yeni Metin Belgesi.txt

  • Я хочу, чтобы он совпадал
    D:\belgelerD\delphi_projects_renamer\12\test_files\

Ответы [ 4 ]

5 голосов
/ 06 июля 2011

Знаете ли вы, какой Delphi полон Path manipulation procedures and functions?

например, в вашем случае, чтобы получить строку D:\belgelerD\delphi_projects_renamer\12\test_files\ из D:\belgelerD\delphi_projects_renamer\12\test_files\Yeni Metin Belgesi.txt, вы можете использовать функцию ExtractFilePath.

2 голосов
/ 05 июля 2011

При первом взгляде на исходное регулярное выражение [^\] соответствует чему угодно, кроме обратной косой черты.Добавление плюса после совпадения один или несколько раз.Наконец, доллар в конце соответствует концу строки.Таким образом, это будет соответствовать последовательности символов, которые не являются обратными слешами, за которыми следует конец строки.Поскольку регулярные выражения являются жадными, они будут захватывать все, начиная от последнего обратного слеша до конца строки.

Для захвата обратного, то есть всего до последнего обратного слеша, вы можете сделать что-то вроде ^.+\\, которое должно захватывать все изначало строки (^) до последней обратной косой черты.

Если вы можете использовать группы сопоставления с образцом, то вы можете использовать что-то вроде ^(.+)([^\]+)$, чтобы сопоставить разбиение строки на две части, каждая из которых будетбыть сохраненным как другой результат для группы совпадений.

Примечание: я не уверен, на что похож движок регулярных выражений Delphi, поэтому вам может понадобиться выйти за скобки, чтобы они работали как разделители групп.

1 голос
/ 05 июля 2011

Не уверен насчет синтаксиса регулярных выражений в Delphi, но это регулярное выражение соответствует всем до последней обратной косой черты:

^.*(?=\\[^\\]+$

0 голосов
/ 07 июня 2013

Этот шаблон: ^(.*)([\\\/]) даст вам такой результат:

соответствует:

  • 0: D:\belgelerD\delphi_projects_renamer\12\test_files\
  • 1: D:\belgelerD\delphi_projects_renamer\12\test_files
  • 2: \

Этот шаблон: ^(.*[\\\/]) даст вам такой результат:

совпадений:

  • 0: D:\belgelerD\delphi_projects_renamer\12\test_files\
  • 1: D:\belgelerD\delphi_projects_renamer\12\test_files\

Шаблон 1 даст вам все до последней косой черты, НЕ включая последнюю косую черту.
Шаблон 2 даст вам все до последней косой черты, включая последнюю косую черту.

...