Я хотел бы создать (PCRE) регулярное выражение, чтобы соответствовать всем обычно используемым нумерованным спискам, и я хотел бы поделиться своими мыслями и собрать информацию о том, как это сделать.
У меня естьопределил «списки» как набор канонических англосаксонских соглашений, то есть
Числа
1 2 3
1. 2. 3.
1) 2) 3)
(1) (2) (3)
1.1 1.2 1.2.1
1.1. 1.2. 1.3.
1.1) 1.2) 1.3)
(1.1) (1.2) (1.3)
Буквы
a b c
a. b. c.
a) b) c)
(a) (b) (c)
A B C
A. B. C.
A) B) C)
(A) (B) (C)
Римские цифры
i ii iii
i. ii. iii.
i) ii) iii)
(i) (ii) (iii)
I II III
i. ii. iii.
i) ii) iii)
(i) (ii) (iii)
Я хотел бы знать, насколько сильный набор списков, и есть ли другие соглашения о нумерации, которые должны быть там, и если любое из них должно быть удалено.
Вот регулярное выражениеЯ создал, чтобы решить эту проблему (в Python ):
numex = r'(?:\d{1,3}'\ # 1, 2, 3
'(?:\.\d{1,3}){0,4}'\ # 1.1, 1.1.1.1
'|[A-Z]{1,2}'\ # A. B. C.
'|[ivxcl]{1,6}' # i, iii, ...
rex = re.compile(r'(\(?%s\)|%s\.?)' % numex, re.I) # re.U?
rex.match("123. Some paragraph")
Я хотел бы знать, насколько адекватно это регулярное выражение для этой проблемы, и если есть другие альтернативы (regex или иным образом) решения.
Кстати, для моего конкретного случая использования я бы не ожидал, что номера списков превышают 25-50.
Спасибо за чтение.
Brian