lis中的拆分元素

2024-05-15 22:30:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个输入字符串:

"[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?

类似问题的答案对我没有帮助:Link1Link2


Tags: inreforlenwithlineelementprice
1条回答
网友
1楼 · 发布于 2024-05-15 22:30:05

你的代码有几个问题。在


创建一个变量来保存这些值

与您当前的问题无关,但如果您想扩展您的解决方案:

您正在迭代文件的行,但没有保留一个保存已通过的值的变量。在

是的,您正在创建一个列表,但是该列表会在for循环中为每一行重新创建。在

因此,保留最后一行的文件,

要解决此问题,请在循环之前添加一个变量并将其添加到该变量中。在

with open(fpath, "r") as f:
    lst = []
    for line in f.readlines():
        lst.append( ... )

价格模式

你正在捕获持有价格的字符串的全部部分。这就是为什么你只能得到一个匹配,而不是每一个价格一个匹配。在

要仅捕获价格,可以使用以下regex

^{pr2}$

按正则表达式拆分字符串

您正在尝试按正则表达式拆分字符串:

x.split(patternx)

它的作用是,它接受正则表达式,充当一个分隔符字符串,而不是正则表达式。在

因此,它只是将子字符串与string进行比较,找不到任何匹配项,只返回整个字符串。在

您应该改为使用re.split。在


从字符串中提取数字

最后,剩下的字符串必须转换为数字并添加到列表中。在

为此,必须遍历re.findall返回的列表,去掉逗号并将其转换为int

prices = re.findall(pattern, line)
    for price in prices:
        number = int(price.replace(',', ''))
        lst.append(number)

最终代码

import re

pattern = r'\$([\d,]{7,11})'

with open(fpath, "r") as f:
    lst = []
    for line in f.readlines():
        prices = re.findall(pattern, line)
        for price in prices:
            number = int(price.replace(',', ''))
            lst.append(number)
    print lst

相关问题 更多 >