краевой эффект (нежелательный эффект) регулярное выражение удалить нумерацию - PullRequest
0 голосов
/ 26 июня 2019

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

В настоящее время я сопоставляю широкий диапазон шаблонов нумерации:

i/ iv. I) II)27 a) 3. b) 145) b) (ii) (9) a-

public class RemoveNumbering
{


  private static final Pattern ROMAN = Pattern.compile(
      "^[(\\\\]?\\s*(?=[DCLXVI])M*(CM|D?C{0,3}|CD)(XC|L?X{0,3}|XL)(IX|V?I{0,3}|IV)[\\-.)/]\\s|^[(\\\\\\\\]?\\\\s*[0-9]+(?:\\\\-|\\)|\\|\\/|\\s*)[-)\\\\/]\\s|^[\\\\(\\\\]?\\s*[0-9]+\\s*(?:\\-|\\)|\\.|\\|\\/|\\s*)\\s*[a-zA-Z]{1}[-\\\\.)\\\\/]\\s+|^[(\\\\]?\\s*[a-zA-Z]{1}[-)\\\\/]\\s+",
      Pattern.CASE_INSENSITIVE);

  private static final Pattern BASIC = Pattern.compile("^[(\\\\]?\\s*[0-9]{1,2}(?:\\-|\\)|\\|\\/|\\s*)[-)\\/]\\s",
      Pattern.CASE_INSENSITIVE);

public String replace(String text)
  {
    Matcher romanMatch = ROMAN.matcher(text);
    while (romanMatch.find())

    {
      text = romanMatch.replaceAll("").replaceAll(" +", " ").trim();
    }
    Matcher singleNumberMatch = BASIC.matcher(text);
    while (singleNumberMatch.find())

    {
      text = singleNumberMatch.replaceAll("").replaceAll(" +", " ").trim();
    }

    return text;
}

Следующие примеры не должны изменяться (без удаления «7-» или «66 B.»):
7 - 10 декабря: Première visite aux États-Unis de Gorbatchev.
66 до н.э .: Захваченный Помпеем, он принадлежал Сирийской провинции.

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