Я хотел бы создать регулярное выражение (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")
Я хотел бы знать, насколько адекватно это регулярное выражение для этой проблемы, и есть ли другие альтернативные (регулярные выражения или иные) решения.
Между прочим, для моего конкретного случая использования я бы не ожидал, что число списков будет больше 25-50.
Спасибо за чтение.
Брайан