Разобрать какой-нибудь странный текстовый формат - PullRequest
3 голосов
/ 10 марта 2010

Я пытаюсь проанализировать некоторые данные, возвращенные сторонним приложением (файл TSV). У меня все данные аккуратно проанализированы в каждом поле (см. Разбор файла TSV ), но я не знаю, как отформатировать некоторые поля.
Иногда данные в поле инкапсулируются так:

=T("[FIELD_DATA]")

(Мне кажется, это какое-то форматирование Excel).
Когда это происходит, определенные символы экранируются CHAR (ASCII_NUM), а остаток строки также инкапсулируется, как в приведенном выше примере, без знака =, который появляется только в начале поля.

Итак, кто-нибудь знает, как я могу разобрать поля, которые выглядят так:

=T("- Merge User Interface of Global Xtra Alert and EMT Alert")&CHAR(10)&T("- Toaster ?!")&CHAR(10)&T("")&CHAR(10)&T("")&CHAR(10)&T("None")&CHAR(10)&T("")&CHAR(10)&T("None")

(любое количество групп CHAR / T ()).

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

Ответы [ 2 ]

1 голос
/ 10 марта 2010

Я бы поступил так же, как Дарин, но его регулярное выражение не работало на меня. Я бы использовал это:

(=T|&CHAR|&T)(\("*([A-Za-z?!0-9 -]*)"*\))+

Вы обнаружите, что Groups[2] (помните смещение нуля на них) будут данными внутри () и "", если существует "". Например, это найдет:

- Merge User Interface of Global Xtra Alert and EMT Alert

в:

=T("- Merge User Interface of Global Xtra Alert and EMT Alert")

и

10

в:

&CHAR(10)

Если у вас есть:

&T("")

будет выдавать ноль в группах [2].

Надеюсь, это поможет.

0 голосов
/ 10 марта 2010
class Program
{
    public static void Main(string[] args)
    {
        var input = @"=T(""- Merge User Interface of Global Xtra Alert and EMT Alert"")&CHAR(10)&T(""- Toaster ?!"")&CHAR(10)&T("""")&CHAR(10)&T("""")&CHAR(10)&T(""None"")&CHAR(10)&T("""")&CHAR(10)&T(""None"")";
        var matches = Regex.Matches(input, @"T\(\""([^\""]*)\""\)");
        foreach (Match match in matches)
        {
            Console.WriteLine(match.Groups[1].Value);
        }            
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...