我正在尝试从某些文本中删除编号(罗马编号和基本编号),我使用以下 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-10décembre:戈尔巴乔夫-埃塞茨-环球大学总理参观。
公元前66年:它是庞培占领的,属于叙利亚省。