是否可以不捕获 Python 正则表达式中字符集的某些元素?



我写了一个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错误(。

最新更新