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

Нужно найти подходящее регулярное выражение для следующих условий:

Мне нужно очистить определенные теги в свободном тексте.Например, в тексте у меня есть два важных тега: <2004:04:12> и <name of person>.К сожалению, в некоторых тегах отсутствует разделитель «<» или «>».

Например, некоторые из них выглядят следующим образом:

1) <2004:04:12 , I need this to be <2004:04:12>
2) 2004:04:12>, I need this to be <2004:04:12>
3) <John Doe , I need this to be <John Doe>

Я попытался использовать следующее для ситуации 1:

String regex = "<\\d{4}-\\d{2}-\\d{2}\\w*{2}[^>]";
String output = content.replaceAll(regex,"$0>");

При этом были найдены все случаи "<2004: 04: 12 "и результатом было" <2004: 04: 12> ".Однако мне нужно убрать пробел перед конечным тегом.

Не уверен, что это лучший способ.Любые предложения.

Спасибо

Ответы [ 2 ]

0 голосов
/ 14 июня 2010

Для фиксации дат вы можете сопоставить любую дату с нулевыми одной или двумя угловыми скобками:

String regex = "(\\s?\\<?)(\\d{4}:\\d{2}:\\d{2})(\\>?\\s)";
String replace = " <$2> ";

Для распознавания имени мы предполагаем, что части имени начинаются с заглавной буквы и толькоразделитель - это пробел.Мы явно сопоставляем угловую скобку в начале или в конце, а предыдущий / последующий символ до / после имени должен быть только пробелом или пунктуацией.

String regex = "(\\<[A-Z][a-zA-Z]*(\\s[A-Z][a-zA-Z])*)(?=[\\.!?:;\\s])";
String replace = "$1>";

String regex = "(?<=[\\.!?:;\\s])([A-Z][a-zA-Z]*(\\s[A-Z][a-zA-Z]*)*)";
String replace = "<$1";
0 голосов
/ 14 июня 2010

По сути, вы ищете отрицательный прогноз, например:

String regex = "<\\d{4}-\\d{2}-\\d{2}(?!>)";
String output = content.replaceAll(regex,"$0>");

Это поможет с числовыми "тегами", но так как никакое регулярное выражение не может быть достаточно разумным, чтобы соответствовать произвольному имениВы должны либо очень точно определить, как может выглядеть имя, либо иметь дело с тем, что такой же подход невозможен для тегов "name".

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