Regex: получить имя файла без расширения в одном выстреле?

Одним из предложений является использование трубы, а также добавление и добавление [].

reader := strings.NewReader(jsonStream)

pr, pw := io.Pipe()

go func() {
    pw.Write([]byte(`[`))
    io.Copy(pw, reader)
    pw.Write([]byte(`]`))
}()

dec := json.NewDecoder(pr)

Вы должны добавить некоторую обработку ошибок.

См. https://play.golang.org/p/Oogu_NdAUyR для всего этого.

13
задан Dan Rosenstark 30 July 2012 в 03:28
поделиться

4 ответа

Попробуйте это:

(.+?)(\.[^.]*$|$)

Это будет:

  • имена файлов Получения, которые запускаются с точки (например, ".logs" файл, названный ".logs", не расширением файла), который распространен в Unix.
  • Получает все кроме последней точки: "foo.bar.jpeg" получает Вас "foo.bar".
  • файлы Дескрипторов без точки: "секретная буква" получает Вас "секретная буква".
<час>

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

37
ответ дан 1 December 2019 в 17:51
поделиться

Все сопровождаемое точкой, сопровождаемой одним или несколькими символами, это не точка, сопровождаемая к концу:

(.+?)\.[^\.]+$

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

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

(.+?)(\.[^\.]+$|$)
4
ответ дан 1 December 2019 в 17:51
поделиться

как насчет 2 получений один для конца и один для имени файла.

, например,

(.+?)(?:\.[^\.]*$|$)
3
ответ дан 1 December 2019 в 17:51
поделиться

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

Думают снова. Если Вы находитесь на платформе.NET, например, то смотрите на Система. Класс IO.Path .

0
ответ дан 1 December 2019 в 17:51
поделиться
Другие вопросы по тегам:

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