[英]parsing scientific publication page ranges in python
我需要分析一組字符串,這些字符串包含頁面范圍,因為它們出現在科學和其他出版物的元數據中。 我沒有關於分頁格式的完整規范,我甚至不確定是否存在分頁格式,但是我需要處理的字符串示例如下:
6-10, 19-22
xlvii-xlviii
111S-2S
326
A078-132
XC-CIII
理想情況下,我想返回每個字符串的頁數,例如9
表示6-10, 19-22
。 如果這太難了,至少是一頁還是更多。 實際上,后者非常容易,因為逗號和破折號似乎是到目前為止我所看到的示例中唯一的分隔符。 但是我非常希望得到正確的計數。
我可以編寫自己的解析器,但很好奇是否有任何現成的程序包已經可以做到這一點或只需很少的mod。
這是一個支持解析“正常”數字和羅馬數字的解決方案。 要解析羅馬數字,請安裝羅馬軟件包(easy_install roman)。 您可以增強parse_num函數以支持其他格式。
import roman
def parse_num(p):
p = p.strip()
try:
return roman.fromRoman(p.upper())
except:
return int(p)
def parse_pages(s):
count = 0
for part in s.split(','):
rng = part.split('-', 1)
a, b = parse_num(rng[0]), parse_num(rng[-1])
count += b - a + 1
return count
>>> parse_pages('17')
1
>>> parse_pages('6-10, 19-22')
9
>>> parse_pages('xlvii-xlviii')
2
>>> parse_pages('XC-CIII')
14
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.