【发布时间】:2010-06-27 16:19:02
【问题描述】:
我想创建一个 (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。
感谢您的阅读。
布赖恩
【问题讨论】:
标签: regex enumeration pcre html-lists roman-numerals