我写了一个parse_area
函数,它将字符串'1,500 sqft'
解析为数字1500
,如下所示:
import re
import pytest
def parse_area(string):
return int(re.sub(',', '', re.search(r'[d,]+(?= sqft)', string)[0]))
def test_parse_area():
assert parse_area('1,500 sqft') == 1500
if __name__ == "__main__":
pytest.main([__file__])
我想知道是否有可能更简洁地编写这个函数,首先不捕获[d,]
字符集中的,
元素。我想使用非捕获组,但根据 https://docs.python.org/3/library/re.html 括号等在字符集中没有特殊含义。
这是函数最简洁的吗?
我认为无论如何最好分两步进行解析,以涵盖找不到匹配项的情况,在这种情况下,我希望parse_area
函数返回None
而不是抛出错误。所以我最后是这样写的:
import pytest
import re
def parse_area(string):
"""Parse the string '1,500 sqft' into the integer 1500"""
m = re.search(r'[d,]+(?= sqft)', string)
return int(m[0].replace(',', '')) if m else None
def test_parse_area():
assert parse_area('1,500 sqft') == 1500
def test_parse_area_null_case():
assert parse_area('no area here') == None
if __name__ == "__main__":
pytest.main([__file__])
并且两个测试都通过了。 (请注意,对于原始实现,第二个测试将抛出'NoneType' not subscriptable
错误(。