Значение типа соответствия не может быть преобразовано в строку - PullRequest
0 голосов
/ 13 февраля 2019

В настоящее время я пытаюсь перебрать папку с текстовыми файлами и прочитать их.После того, как я их прочитал, я хотел бы извлечь определенную часть имени файлов с помощью регулярных выражений, однако я получаю сообщение об ошибке Value of Type Match Cannot Be Converted To String.

Я пытался использовать Cstr однакоЭто, похоже, не решает мою проблему.

Код, который я использую:

 Dim fileentries As String() = Directory.GetFiles("D:\User\BackUp\Project\bin\Debug\Orders")
 For Each entry In fileentries
        Dim match As New List(Of String)
        Dim regexmatch As Match = Regex.Match(entry, "Order_\d\d-\d\d-[\d]{4}_[\d]{6}")
        match.Add(CStr(regexmatch))

    Next

Здесь работает раздел «Регулярные выражения», похоже, он извлекает правильную часть имени файла, который я хочуоднако конкретно со строкой match.Add(Cstr(regexmatch)) я получаю ошибку, которую я описал.

Любая помощь приветствуется, спасибо.

1 Ответ

0 голосов
/ 13 февраля 2019

Вам необходимо получить доступ к свойству .Value объекта Match, но рекомендуется проверить, есть ли совпадение вообще:

Dim regexmatch As Match = Regex.Match(entry, "Order_\d\d-\d\d-\d{4}_\d{6}")
If regexmatch.Success Then
    match.Add(regexmatch.Value)
End If

См. VB.NETdemo :

Imports System.Collections.Generic
Imports System.Text.RegularExpressions
' ... 
Dim match As New List(Of String)()
Dim entry As String = "XXXX_Order_12-12-1234_123456_irrelevant.txt"
Dim regexmatch As Match = Regex.Match(entry, "Order_\d\d-\d\d-\d{4}_\d{6}")
If regexmatch.Success Then
    match.Add(regexmatch.Value)
End If
Console.WriteLine(match(0)) ' => Order_12-12-1234_123456

Обратите внимание, что [\d]{4} равен \d{4}, нет необходимости помещать один атом в класс символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...