Python 拆分列表中的元素

Python 拆分列表中的元素,python,regex,list,Python,Regex,List,我有一个输入字符串: “[u'$799900',u'$1698000',u'$998000',u'$1299000', u'$1000000',u'$499950',u'$995000',u'$998000',u'$2000000', u'$988000',u'$979000',u'$1285000',u'$988000',u'$579000', u'$700000',u'$1100000',u'$1557000',u'$999888',u'$798000', u'$998000',u'$105

我有一个输入字符串:

“[u'$799900',u'$1698000',u'$998000',u'$1299000', u'$1000000',u'$499950',u'$995000',u'$998000',u'$2000000', u'$988000',u'$979000',u'$1285000',u'$988000',u'$579000', u'$700000',u'$1100000',u'$1557000',u'$999888',u'$798000', u'$998000',u'$1050000',u'$888000',u'$559888',u'$774900', u'$795000',u'$850000'],“[u'3 bds',u'2 ba',u'1361平方英尺',u'4 bds',u'3 ba',u'2845平方英尺',u'3 bds',u'3 ba',u'1534 平方英尺,u'3 bds',u'2 ba',u'1762平方英尺',u'5 bds',u'3 ba',u' 2398平方英尺,u'2 bds',u'2 ba',u'956平方英尺,u'4 bds',u'3 ba', u'1840平方英尺,u'3 bds',u'2 ba',u'1212平方英尺,u'3 bds',u'3 英国航空公司,u'1878平方英尺,u'3英国航空公司,u'2英国航空公司,u'1240平方英尺,u'3英国航空公司, u'2 ba',u'1207平方英尺',u'3 bds',u'3 ba',u'1905平方英尺',u'3 bds',u'3.5 ba',u'1591平方英尺',u'2 bds',u'2 ba',u'946 平方英尺,u'2 bds',u'2 ba',u'1067平方英尺',u'4 bds',u'3 ba',u' 2254平方英尺,u'5 bds',u'4 ba',u'2744平方英尺,u'3 bds',u'3 ba 'u'1291平方英尺',u'4 bds',u'3 ba',u'1480平方英尺',u'3 bds',u' 2 ba',u'1513平方英尺',u'4 bds',u'2 ba',u'1846平方英尺',u'9 bds 'u'5 ba',u'3336平方英尺',u'2 bds',u'2 ba',u'983平方英尺',u'4 bds',u'3 ba',u'1476平方英尺',u'3 bds',u'3 ba',u'1872 平方英尺,u'2 bds',u'3 ba',u'1459平方英尺']

从中,我需要将价格提取到
int
s的列表中

这就是我迄今为止所尝试的:

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循环中为每一行重新创建

因此,您将仅获取文件的最后一行,而不处理其他行

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

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

价格模式 您正在捕获包含价格的字符串的整个部分。这就是为什么你只能得到一个匹配,而不是每个价格都有一个匹配

要仅获取价格,您可以使用以下内容:


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

x.split(patternx)

这样做的目的是,它接受正则表达式,就像它是一个分隔符字符串一样,而不是正则表达式

所以,它只是将子字符串与字符串进行比较,没有找到任何匹配项,只是返回整个字符串

你应该改用


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

要做到这一点,您必须遍历由
re.findall
返回的列表,去掉逗号并将其转换为int

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

最终代码
您的代码中有几个问题


创建一个保存这些值的变量 与您当前的问题无关,但如果您想扩展您的解决方案,则重要:

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

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

因此,您将仅获取文件的最后一行,而不处理其他行

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

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

价格模式 您正在捕获包含价格的字符串的整个部分。这就是为什么你只能得到一个匹配,而不是每个价格都有一个匹配

要仅获取价格,您可以使用以下内容:


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

x.split(patternx)

这样做的目的是,它接受正则表达式,就像它是一个分隔符字符串一样,而不是正则表达式

所以,它只是将子字符串与字符串进行比较,没有找到任何匹配项,只是返回整个字符串

你应该改用


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

要做到这一点,您必须遍历由
re.findall
返回的列表,去掉逗号并将其转换为int

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

最终代码
请提供原始字符串,非常确定有直接拆分的方法。我非常确定
是一个打字错误,应该是
。除此之外,我真的不知道你想做什么。你能发布输入和预期输出的示例吗?@Slayther-这不是一个打字错误-想法是以几十万和几百万的形式对值进行grep-我用示例字符串在regex101上检查了它,它工作了-我发布了预期输出的示例,并将其命名为newlst-不确定缺少什么-输入字符串是lst-预期输出是newlst预期输出没有5个条目,它有13个条目。除非是打字错误,否则newlst=[7999001698000 998000 1299000,1000000]有13个条目。这就是你真正想做的吗?或者是打字错误?请提供原始字符串,非常确定有直接拆分的方法。我非常确定
是一种打字错误,应该是
。除此之外,我真的不知道你想做什么。你能发布输入和预期输出的示例吗?@Slayther-这不是一个打字错误-想法是以几十万和几百万的形式对值进行grep-我用示例字符串在regex101上检查了它,它工作了-我发布了预期输出的示例,并称之为newlst-不确定什么是错误的