Я пытаюсь удалить нумерацию (как римскую, так и основную нумерацию) из некоторого текста, я использую следующее 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 до н.э .: Захваченный Помпеем, он принадлежал Сирийской провинции.