Как обработать эту строку с помощью регулярного выражения - PullRequest
0 голосов
/ 07 апреля 2010

мой стиль строки, как это

expression1/field1+expression2*expression3+expression4/field2*expression5*expression6/field3

настоящий стиль, как это:

computer/(100)+web*mail+explorer/(200)*bbs*solution/(300)

"+" и "*" представляют оператор "компьютер", "сеть" ... представляют выражение (100), (200) представляют номер поля. поле num может не существовать.

Я хочу обработать строку следующим образом:

<computer>/(100)+web*<mail>+explorer/(200)*bbs*<solution>/(300)

такие правила

если длина выражения больше 3 и его поле не равно (200), добавьте в него скобки.

Ответы [ 2 ]

0 голосов
/ 07 апреля 2010

Я рекомендую смешивать регулярные выражения с другими языковыми функциями. Сложность возникает из-за того, что field появляется раньше, чем expression с, и взгляд назад обычно более ограничен, чем взгляд вперед.

В псевдо-Java-коде я рекомендую сделать что-то вроде этого:

String[] parts = input.split("/");

for (int i = 0; i < parts.length; i++) {
  if (!parts[i].startsWith("(200)"))
    parts[i] = parts[i].replaceAll("(?=[a-z]{4})([a-z]+)", "<$1>");
}

String output = parts.join("/");
0 голосов
/ 07 апреля 2010

Я бы не использовал просто регулярное выражение.

Вы говорите: «если длина выражения больше 3, а его поле не равно (200), добавьте в него скобки»

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

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

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