我需要解析一组包含页面范围的字符串,因为它们出现在科学和其他出版物的元数据中。我没有完整的分页格式规范,我甚至不确定是否存在分页格式,但我需要处理的字符串示例如下:
6-10, 19-22
xlvii-xlviii
111S-2S
326
A078-132
XC-CIII理想情况下,我希望返回每个字符串的页数,例如6-10, 19-22的9。如果这太难了,至少是一页或更多。后者实际上非常简单,因为到目前为止,我所见过的示例中似乎只有逗号和破折号作为分隔符。但我确实非常喜欢得到正确的计数。
我可以写我自己的解析器,但我很好奇是否有任何现有的包已经可以做到这一点,开箱即用或使用最少的mods。
发布于 2016-11-02 15:12:00
这里有一个支持解析“正常”数字和罗马数字的解决方案。要解析罗马数字,请安装罗马包(easy_install罗马)。您可以增强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')
14https://stackoverflow.com/questions/37686086
复制相似问题