我有一个输入字符串:
"[u'$799,900', u'$1,698,000', u'$998,000', u'$1,299,000', u'$1,000,000', u'$499,950', u'$995,000', u'$998,000', u'$2,000,000', u'$988,000', u'$979,000', u'$1,285,000', u'$988,000', u'$579,000', u'$700,000', u'$1,100,000', u'$1,557,000', u'$999,888', u'$798,000', u'$998,000', u'$1,050,000', u'$888,000', u'$559,888', u'$774,900', u'$795,000', u'$850,000']","[u'3 bds ', u' 2 ba ', u' 1,361 sqft', u'4 bds ', u' 3 ba ', u' 2,845 sqft', u'3 bds ', u' 3 ba ', u' 1,534 sqft', u'3 bds ', u' 2 ba ', u' 1,762 sqft', u'5 bds ', u' 3 ba ', u' 2,398 sqft', u'2 bds ', u' 2 ba ', u' 956 sqft', u'4 bds ', u' 3 ba ', u' 1,840 sqft', u'3 bds ', u' 2 ba ', u' 1,212 sqft', u'3 bds ', u' 3 ba ', u' 1,878 sqft', u'3 bds ', u' 2 ba ', u' 1,240 sqft', u'3 bds ', u' 2 ba ', u' 1,207 sqft', u'3 bds ', u' 3 ba ', u' 1,905 sqft', u'3 bds ', u' 3.5 ba ', u' 1,591 sqft', u'2 bds ', u' 2 ba ', u' 946 sqft', u'2 bds ', u' 2 ba ', u' 1,067 sqft', u'4 bds ', u' 3 ba ', u' 2,254 sqft', u'5 bds ', u' 4 ba ', u' 2,744 sqft', u'3 bds ', u' 3 ba ', u' 1,291 sqft', u'4 bds ', u' 3 ba ', u' 1,480 sqft', u'3 bds ', u' 2 ba ', u' 1,513 sqft', u'4 bds ', u' 2 ba ', u' 1,846 sqft', u'9 bds ', u' 5 ba ', u' 3,336 sqft', u'2 bds ', u' 2 ba ', u' 983 sqft', u'4 bds ', u' 3 ba ', u' 1,476 sqft', u'3 bds ', u' 3 ba ', u' 1,872 sqft', u'2 bds ', u' 3 ba ', u' 1,459 sqft']"
从中,我需要将价格提取到一个列表中
到目前为止,我一直在努力:
import re
pattern_price = r'\[u\'\$.*?\]'
patternx = r"(.*?u.*?)(\d+\,\d+\,\d+|\d+\,\d+)"
with open(fpath, "r") as f:
for line in f.readlines():
lst = re.findall(pattern_price, line)
print len(lst) # I get list with 1 element?
newlst = [x.split(patternx) for x in lst]
print len(newlst) # I got 1 element again?
你的代码有几个问题。在
创建一个变量来保存这些值
与您当前的问题无关,但如果您想扩展您的解决方案:
您正在迭代文件的行,但没有保留一个保存已通过的值的变量。在
是的,您正在创建一个列表,但是该列表会在for循环中为每一行重新创建。在
因此,保留最后一行的文件,
要解决此问题,请在循环之前添加一个变量并将其添加到该变量中。在
价格模式
你正在捕获持有价格的字符串的全部部分。这就是为什么你只能得到一个匹配,而不是每一个价格一个匹配。在
要仅捕获价格,可以使用以下regex:
^{pr2}$按正则表达式拆分字符串
您正在尝试按正则表达式拆分字符串:
x.split(patternx)
它的作用是,它接受正则表达式,充当一个分隔符字符串,而不是正则表达式。在
因此,它只是将子字符串与string进行比较,找不到任何匹配项,只返回整个字符串。在
您应该改为使用re.split。在
从字符串中提取数字
最后,剩下的字符串必须转换为数字并添加到列表中。在
为此,必须遍历
re.findall
返回的列表,去掉逗号并将其转换为int最终代码
相关问题 更多 >
编程相关推荐