Regexp файл без расширения

Обновлено: 02.07.2024

что, конечно, работает только в том случае, если имя файла имеет одно расширение. Но если это adfadsfads.blah.txt , я просто хочу adfadsfads.blah . Как я могу сделать это с regex?

Что касается вопроса Дэвида: "зачем вам использовать для этого regex", то ответ таков: 'for fun.' на самом деле код, который я использую, прост

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

Я хочу использовать regex, чтобы получить имя файла без расширения. У меня возникли проблемы с получением regex, чтобы вернуть значение. У меня есть это: string path = @C:\PERSONAL\TEST\TESTFILE.PDF; var name = Regex.Match(path, @(.+?)(\.[^\.]+$|$)).Value; В этом случае name всегда возвращается.

Я обращаюсь к нескольким файлам в объекте SPLFileInfo. Я вижу способ получить путь, имя файла и даже расширение файла. Есть ли способ получить имя файла без расширения? Вот код, с которым я работал, но я надеюсь получить что-то более элегантное. Есть ли выходное решение? $file = new.

  • Захватывайте имена файлов , которые начинаются с точки (например, .logs -это файл с именем .logs , а не расширение файла), что часто встречается в Unix.
  • Получает все, кроме последней точки: foo.bar.jpg получает вас foo.bar .
  • Обрабатывает файлы без точки: secret-letter возвращает вам secret-letter .

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

Все, за чем следует точка, за которой следует один или несколько символов, которые не являются точкой, за которыми следует end-of-string:

everything-before-the-last-dot сгруппирован для удобства поиска.

Если вы не уверены, что каждый файл будет иметь расширение, попробуйте:

как насчет 2 захватов, один для конца и один для имени файла.

  1. Получает путь без последнего \
  2. Файл без расширения
  3. Расширение с .

Не поддерживает несколько . в имени файла Поддерживает ли . в пути к файлу

Хорошо, я не уверен, почему я бы использовал для этого регулярное выражение. Если я знаю, например, что строка является полным путем к файлу, то я бы использовал другой API, чтобы получить имя файла. Регулярные выражения очень мощные, но в то же время довольно сложные (вы только что доказали это, спросив, как создать такой простой regex). Кто-то сказал: у вас была проблема, которую вы решили решить с помощью регулярных выражений. Теперь у вас есть две проблемы.

Я использовал этот шаблон для простого поиска:

для этого текста:

Он находит fileext во второй и последней строках.
Я применил его в виде текстового дерева папки (с пробелами в качестве отступов).

Просто имя файла, без пути и суффикса.

Похожие вопросы:

Я пытаюсь получить имя файла без расширения в ColdFusion. Я использую следующую функцию: REMatchNoCase( (.+?)(\.[^.]*$|$) , Doe, John 8.15.2012.docx ); Я бы хотел, чтобы это возвращало массив типа.

Скажем, у меня есть что-то вроде этого: new File(test).eachFile() < file-> println file.getName() >При этом выводится полное имя каждого файла в каталоге test . Есть ли способ Groovy получить.

Кто-нибудь может сказать мне, как получить имя файла без расширения? Пример: fileNameWithExt = test.xml; fileNameWithOutExt = test;

Я хочу использовать regex, чтобы получить имя файла без расширения. У меня возникли проблемы с получением regex, чтобы вернуть значение. У меня есть это: string path =.

Я обращаюсь к нескольким файлам в объекте SPLFileInfo. Я вижу способ получить путь, имя файла и даже расширение файла. Есть ли способ получить имя файла без расширения? Вот код, с которым я работал.

Я хочу получить имя файла изображения без расширения в MATLAB. Я попытался использовать функцию (fileparts )как: [pathstr, name, ext, versn] = fileparts(filename); в этой функции (имя файла) должно.

Если у меня есть имя файла, подобное одному из этих: 1.1.1.1.1.jpg 1.1.jpg 1.jpg Как я мог получить только имя файла, без расширения? Подойдет ли regex?

что, конечно, работает только если имя файла имеет одно расширение. Но если это так . --2--> Я хочу adfadsfads.blah . Как я могу сделать это с regex?

что касается вопроса Дэвида, "почему вы используете regex" для этого, ответ: "для удовольствия.- На самом деле я использую простой код!--5-->

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

  • захват имен файлов, которые начинаются с точки (например,".журналы" файл ".logs", а не расширение файла), которое распространено в Unix.
  • получает все, кроме последней точки: "foo.бар.jpg "gets you" foo.бар."
  • обрабатывает файлы без точки: "секретное письмо" получает "секретное письмо".

Примечание: как предложил комментатор j_random_hacker, это выполняется как объявлено, но возможно, вы захотите предшествовать вещам с якорем для целей читаемости.

все, за которым следует точка, за которой следует один или несколько символов, которые не являются точкой, а затем конец строки:

все-до последней точки сгруппированы для облегчения поиска.

Если вы не на 100% уверен, что каждый файл будет иметь расширение, попробовать:

Как насчет 2 захватывает один для конца и один для имени файла.

  1. получает путь без последнего \
  2. файл без расширения
  3. расширение с .

не поддерживает несколько . в имя файла Поддерживает . в пути к файлу

хорошо, я не уверен, почему я буду использовать регулярное выражение для этого. Если я знаю, например, что строка является полным путем к файлу, я бы использовал другой API для получения имени файла. Регулярные выражения очень мощные, но в то же время довольно сложные (Вы только что доказали это, спросив, как создать такое простое регулярное выражение). Кто-то сказал: У вас была проблема, которую вы решили решить с помощью регулярных выражений. Теперь у вас две проблемы.

я использовал этот шаблон для простого поиска:

находит fileext во второй и последней строках.
Я применил его в виде текстового дерева папки (с пробелами в виде отступов).

Которые, конечно, работают, только если имя файла имеет одно расширение. Но если это adfadsfads.blah.txt , я просто хочу adfadsfads.blah . Как я могу сделать это с помощью регулярного выражения?

Что касается вопроса Дэвида «зачем вам использовать регулярное выражение», то ответ будет «для развлечения». На самом деле код, который я использую, прост

Но мне нравится изучать регулярные выражения, когда это возможно, потому что они всегда появляются на коктейльных вечеринках Geek.

  • Захватывайте имена файлов, начинающиеся с точки (например, .logs - это файл с именем .logs , а не расширение файла), что широко распространено в Unix.
  • Получает все, кроме последней точки: foo.bar.jpg дает вам foo.bar .
  • Обрабатывает файлы без точки: secret-letter дает вам secret-letter .

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

Все, за которыми следует точка, за которой следует один или несколько символов, кроме точки, за которым следует конец строки:

Все до последней точки сгруппированы для облегчения поиска.

Если вы не уверены на 100%, что у каждого файла будет расширение, попробуйте:

Как насчет 2 захватывает один для конца и один для имени файла.

  1. Получает путь без последнего \
  2. Файл без расширения
  3. Расширение с .

Не поддерживает несколько . в имени файла. Поддерживает ли . в пути к файлу

Хорошо, я не уверен, зачем мне использовать для этого регулярное выражение. Если я знаю, например, что строка представляет собой полный путь к файлу, я бы использовал другой API для получения имени файла. Регулярные выражения очень эффективны, но в то же время довольно сложны (вы только что доказали это, спросив, как создать такое простое регулярное выражение). Кто-то сказал: у вас была проблема, которую вы решили решить с помощью регулярных выражений. Теперь у вас две проблемы.

Я использовал этот шаблон для простого поиска:

Для этого текста:

Он находит fileext во второй и последней строках.
Я применил его в текстовом дереве папки (с пробелами в качестве отступов).

Мне нужно регулярное выражение, которое может удалить расширение имени файла, возвращая только имя файла.

Вот несколько примеров входов и выходов:

Я, очевидно, могу сделать это вручную (т.е. удалить все из последней точки), но я уверен, что существует регулярное выражение, которое может сделать это само по себе.

Только для записи, я делаю это в JavaScript

ОТВЕТЫ

Ответ 1

Результат будет в первой группе захвата. Однако, вероятно, более эффективно просто найти положение самого правого периода, а затем взять все перед ним, не используя регулярное выражение.

Ответ 2

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

|| input заботится о случае, где lastIndexOf() предоставляет -1 . Понимаете, это все еще однострочный.

Ответ 3

Тестовые случаи, когда это работает, и другие не работают:

  • ". htaccess" (ведущий период)
  • "файл" (без расширения файла)
  • "отправьте на mrs." (без расширения, но заканчивается на abbr.)
  • "версия 1.2 проекта" (без расширения, но все еще содержит период)

Общий поток выше - это, конечно, "искаженные" расширения файлов. Но вы всегда должны думать об этих угловых случаях.: P

Тестовые случаи, когда это не удается:

  • "версия 1.2" (расширение файла отсутствует, но "появляется" ).
  • "name.tar.gz" (если вы рассматриваете это как "составное расширение" и хотели, чтобы он разделился на "имя" и ".tar.gz" )

Ответ 4

Регулярное выражение для соответствия шаблону:

Он находит символ точки (\.), За которым следуют 0 или более символов, которые не являются точками ([^.] *), За которыми следует конец строки ($).

Ответ 5

Здесь мое протестированное регулярное выражение.

Образец будет соответствовать filenameNoExt с/без расширения в пути, соблюдая разделители слэшей и обратной косой черты

раскрытие вышеприведенного шаблона:

Это будет охватывать все случаи, упомянутые @RogerPate, но включая и полные пути

Ответ 6

еще один способ сделать это без регулярных выражений ("опосайт" версии @Rahul, не использующий pop() для удаления)

Не требуется ссылаться на переменную дважды, поэтому ее проще встроить

Ответ 7

Это также сделает это:)

Я бы придерживался regexp, хотя. = P

Ответ 8

это воплотит ваше желание. Но не регулярный способ выражения.

Ответ 9

В javascript вы можете вызвать метод Replace(), который будет заменен на основе регулярного выражения.

Это регулярное выражение будет соответствовать всем значениям от начала строки до конца и удалять что-либо после последнего периода, включая период.

Читайте также: