Разобрать какой-то странный текстовый формат

Я пытаюсь проанализировать некоторые данные, возвращаемые сторонним приложением (файл 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()).

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


person Antoine    schedule 10.03.2010    source источник
comment
Самое интересное - это когда у вас есть & или внутри ваших строк - потенциально замаскированные в соответствии с правилами Excel....   -  person weismat    schedule 10.03.2010


Ответы (1)


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

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

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

- Merge User Interface of Global Xtra Alert and EMT Alert

in:

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

и:

10

in:

&CHAR(10)

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

&T("")

это даст нуль в Groups[2].

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

person Tim C    schedule 10.03.2010
comment
Еще не тестировал встроенное ИЛИ, но, похоже, это работает, спасибо. - person Antoine; 12.03.2010