Комплексная обработка строк - хорошо сложный для меня - PullRequest
2 голосов
/ 29 марта 2010

Я звоню в веб-сервис, и все, что я получаю, - это огромный кусок текста. Я оставлен, чтобы обработать это непосредственно. Проблема не во всех линиях обязательно одинакова. Каждый из них имеет 2 или 3 секции, и они похожи. Вот самые распространенные примеры

text1 [text2] /text3/
text1/test3
text1[text2]/text3
text1 [text2] /text /3 here/

Я не совсем уверен, как подойти к этой проблеме. Я не слишком хорош в продвижении чего-либо такого, что касается манипулирования строками.

Я думал, что использование регулярного выражения может сработать, но не слишком уверен в этом. Если я смогу разбить каждый из этих трех разделов, то оттуда будет легче сделать все остальное. похоже, что в трех основных разделах, с которыми я знаю, работать не получится.

РЕДАКТИРОВАТЬ: Спасибо за упоминание, я на самом деле не сказал, что я хотел сделать.

По сути, я хочу разделить эти 3 раздела текста на отдельные строки, отдельные строки, так что, в основном, это одна строка в массив из 3 строк.

string[0] = text1
string[1] = text2
string[2] = text3

Вот пример текста, который я получил от звонка в качестве примера

スルホ基 [スルホき] /(n) sulfo group/
鋭いナイフ [するどいナイフ] /(n) sharp knife/
鋭い批判 [するどいひはん] /(n) sharp criticism/
スルナーイ /(n) (See ズルナ) (obsc) surnay (Anatolian woodwind instrument) (per:)/zurna/
スルピリン /(n) sulpyrine/
スルファミン /(n) sulfamine/
剃る [そる(P);する] /(v5r,vt) to shave/(P)/

В качестве первой строки для примера я хочу вывести его в массив

string[0] = スルホ基
string[0] = [スルホき]
string[0] = /(n) sulfo group/

Ответы [ 3 ]

3 голосов
/ 29 марта 2010

Эти примеры кажутся немного случайными, должен быть какой-то порядок, разве нет спецификации для сервиса? Если нет, я предлагаю больше примеров, чтобы мы могли понять правила.

0 голосов
/ 29 марта 2010

Самый глупый ответ: «Используйте регулярные выражения».Но для лучшего нужно больше информации.

0 голосов
/ 29 марта 2010

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

Если группы в каждой строке имеют какой-то порядок, то, возможно, вы можете использовать регулярное выражение для разделения групп.

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

Я должен упомянуть, что ваши регулярные выражения сломаются или станут просто кошмаром, если в ваших данных есть какие-то капризы (и часто они есть). Поэтому проверяйте долго и усердно, прежде чем остановиться на них. Если вы обнаружите, что у вас начинают возникать исключения в ваших данных, вам нужно будет выбрать какой-то алгоритм разбора (упомянутый выше FSM - шаблон, которому вы можете следовать, если реализуете механизм разбора).

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