我正在寻找一个正则表达式,它给我2 AA pp. 184-185
,194-200
,201-210
,900-410
,789.
和AA pp 450
来自:
RA pp 24-25; 2 AA pp. 184-185, 194-200, 201-210, 900-410, 789.
到目前为止我已经想出了这个:
([\(|;]\s*(\d+)?\s*AA\s*p+\.?\s*((\d+)([\s*|\-+?](\d+))\s*,\s*)*(\d+)\.?[;|\)])
使用re.findAll,但它给了我:
[('; 2 AA pp. 184-185, 194-200, 201-210, 900-410, 789.)', '2', '900-410, ', '900', '-410', '410', '789'), ('( AA pp. 450)', '', '', '', '', '', '450')]
我如何得到我想要的东西。我是新手,并且一直在使用pythex.org来练习正则表达式。
其他信息:
感谢SiHa,这是标准。字符串在开始之后是a(或a;后跟数字(这是可选的btw)并且AA后跟一个或两个ps,后跟数字范围或只是一个数字后跟a;或者)
以下是一些例子:
(2 AA p. 127, 128.)
(AA p. 61; 1 RT pp. 24-27.) --> i dont want anything after semicolon
(AA p. 64, lines 9-14.) --> dont want anything after comma
(AA p. 127, 200.)
答案 0 :(得分:0)
这个正则表达式:
import re
p = re.compile(ur'(?:([-\d\w ]+)[;,.] ?)', re.MULTILINE | re.IGNORECASE)
test_str = u"RA pp 24-25; 2 AA pp. 184-185, 194-200, 201-210, 900-410, 789."
print re.findall(p, test_str)
给予:
[u' RA pp 24-25',u' 2 AA pp',u' 184-185',u' 194-200',你' 201-210',你' 900-410',你' 789']
答案 1 :(得分:0)
您可以使用re.split
:
string = "RA pp 24-25; 2 AA pp. 184-185, 194-200, 201-210, 900-410, 789."
print re.split(r'[;,]\s*', string)
输出结果为:
['RA pp 24-25', '2 AA pp. 184-185', '194-200', '201-210', '900-410', '789.']