Wyciągnięcie nazwy pliku bez rozszerzenia za pomocą Regex

0

Witam, mam problem z wyciągnięciem nazwy pliku za pomocą Regex bez rozszerzenia.
Chodzi mi o to, aby mając plik nazwapliku.mp3 uzyskać nazwapliku.
Z góry dzięki za pomoc

3

(.*?)\. w grupie \1 będzie nazwa do pierwszej kropki.
(.*)\. w grupie \1 będzie nazwa do ostatniej kropki.

Hint: To bardzo proste wyrażenia - niżej masz też bardziej skomplikowane (lepsze).

1

Czasami łatwiej coś zrobić bez regexa:

var fullname = "nazwa.pliku.mp3";
var name = name.Substring(0,fullname.LastIndexOf('.'));
0

Niestety muszę to zrobić za pomocą regexa.

(.*).
wyświetla wraz z kropką, a mi jest potrzebne bez.

1

Nie patrz na match tylko na grupę \1.

A tutaj masz całą opowieść o wyrażeniu regularnym dla nazw plików: http://movingtofreedom.org/2008/04/01/regex-match-filename-base-and-extension/
Ostatecznie pokazują tam taki regex: (.*?)(\.[^.]*$|$).

2

To korzystając z regexa od @Endrju, chyba będzie tak:

var fullname = "bardzo.dluga.nazwa.pliku.mp3";
 var pattern = @"(.*?)(\.[^.]*$|$)";
 Console.WriteLine(Regex.Split(fullname, pattern)[1]);
0

Trochę się pogubiłem.
Mój problem polega na tym, że w windows formsie robię odtwarzacz muzyki i przy otwieraniu plików mp3 chcę wypisać do listboxa nazwy piosenek bez rozszerzenia.
Nie bardzo wiem o co chodzi z tymi grupami w regexie.

 string[] plik, sciezka;
        Regex r = new Regex(@"(.*)\.");
        private void otwórzToolStripMenuItem_Click(object sender, EventArgs e)
        {
            OpenFileDialog otworz = new OpenFileDialog();
            openFileDialog1.Multiselect = true;
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                plik = openFileDialog1.SafeFileNames;
                sciezka = openFileDialog1.FileNames;
                for (int i = 0; i < plik.Length; i++)
                {                   
                        MatchCollection matches = r.Matches(plik[i]);
                        foreach (Match match in matches)
                        {
                            listBox1.Items.Add(match);
                        }
                }
 
                foreach (string d in otworz.FileNames)
                {
                    listBox1.Items.Add(d);
                }
            }
        } 

Tak wygląda u mnie wczytywanie i wypisywanie do listboxa nazw piosenek, z tym, że wypisuje mi je z kropkami na końcu.

1

Używasz nie tego wyrażenia.
A tak w ogóle to nie potrzebujesz tego regexa

System.IO.Path.GetFileNameWithoutExtension("file.exe")

Zwróci nazwę bez rozszerzenia.

0

Chcąc nie chcąc muszę użyć regexa.

1

No to czemu nie zrobisz tego tak jak pokazałem w dodatku używając jakiegoś innego wyrażenia?

Regex r = new Regex(@"(.*?)(\.[^.]*$|$)");
 if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                plik = openFileDialog1.SafeFileNames;
                sciezka = openFileDialog1.FileNames;

                foreach(var p in plik)
                    listbox1.Items.Add(r.Split(p)[1]);
                
 
                foreach (string d in otworz.FileNames)
                {
                    listBox1.Items.Add(d);
                }
            }

1 użytkowników online, w tym zalogowanych: 0, gości: 1