如何为这个字符串写一个正则表达式:(RA pp 24-25; 2 AA pp.184-185,194-200,201-210,900-410,789。)并且有一个测试(AA pp.450)

时间:2016-06-07 07:11:24

标签: python regex python-2.7

我正在寻找一个正则表达式,它给我2 AA pp. 184-185194-200201-210900-410789.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.) 

2 个答案:

答案 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.']