寻找子字串时,如何更好地编码?

时间:2019-07-12 07:34:41

标签: python-3.x

我想从列表中提取货币(以及$符号),并创建两个已经完成的货币列表。但是,有没有更好的方法来编码呢?

列表如下:

['\n\n\t\t\t\t\t$59.90\n\t\t\t\t\n\n\n\t\t\t\t\t\t$68.00\n\t\t\t\t\t\n\n',
 '\n\n\t\t\t\t\t$55.00\n\t\t\t\t\n\n\n\t\t\t\t\t\t$68.00\n\t\t\t\t\t\n\n',
 '\n\n\t\t\t\t\t$38.50\n\t\t\t\t\n\n\n\t\t\t\t\t\t$49.90\n\t\t\t\t\t\n\n',
 '\n\n\t\t\t\t\t$49.00\n\t\t\t\t\n\n\n\t\t\t\t\t\t$62.00\n\t\t\t\t\t\n\n',
 '\n\n\t\t\t\t\t$68.80\n\t\t\t\t\n\n',
 '\n\n\t\t\t\t\t$49.80\n\t\t\t\t\n\n\n\t\t\t\t\t\t$60.50\n\t\t\t\t\t\n\n']

Python代码:

pp_list = []
up_list = []

for u in usual_price_list:
    rep = u.replace("\n","")
    rep = rep.replace("\t","")
    s = rep.rsplit("$",1)
    pp_list.append(s[0])
    up_list.append("$"+s[1])

2 个答案:

答案 0 :(得分:4)

对于这种问题,我倾向于使用很多re模块,因为它更具可读性,更易于维护并且不依赖于所寻找字符的周围:

import re

pp_list = []
up_list = []


for u in usual_price_list:
    prices = re.findall(r"\$\d{2}\.\d{2}", u)
    length_prices = len(prices)
    if length_prices > 0:
        pp_list.append(prices[0])
    if length_prices > 1:
        up_list.append(prices[1])

常规表达式细分

  • $是字符串字符的结尾,因此我们需要对其进行转义
  • \d匹配任何数字,因此\d{2}精确匹配2个数字
  • .与任何字符匹配,因此我们需要对其进行转义

如果需要,您可以使用\d{1,2}来修改一位数或两位数,或者使用\d*来匹配0位数或更多位数来修改分位数。

答案 1 :(得分:0)

正如已经指出的那样,执行任务re模块很有用-我将通过以下方式使用re.split

import re
data = ['\n\n\t\t\t\t\t$59.90\n\t\t\t\t\n\n\n\t\t\t\t\t\t$68.00\n\t\t\t\t\t\n\n',
 '\n\n\t\t\t\t\t$55.00\n\t\t\t\t\n\n\n\t\t\t\t\t\t$68.00\n\t\t\t\t\t\n\n',
 '\n\n\t\t\t\t\t$38.50\n\t\t\t\t\n\n\n\t\t\t\t\t\t$49.90\n\t\t\t\t\t\n\n',
 '\n\n\t\t\t\t\t$49.00\n\t\t\t\t\n\n\n\t\t\t\t\t\t$62.00\n\t\t\t\t\t\n\n',
 '\n\n\t\t\t\t\t$68.80\n\t\t\t\t\n\n',
 '\n\n\t\t\t\t\t$49.80\n\t\t\t\t\n\n\n\t\t\t\t\t\t$60.50\n\t\t\t\t\t\n\n']
prices = [re.split(r'[\n\t]+',i) for i in data]
prices0 = [i[1] for i in prices]
prices1 = [i[2] for i in prices]
print(prices0)
print(prices1)

输出:

['$59.90', '$55.00', '$38.50', '$49.00', '$68.80', '$49.80']
['$68.00', '$68.00', '$49.90', '$62.00', '', '$60.50']

请注意,假设仅存在\n\t(不包括价格),并且在第一个价格之前至少有一个\n\t,并且至少有一个,这将起作用价格之间\n\t

[\n\t]+表示由\n\t组成的长度为1或更大的任何字符串,即\n\t\n\n\t\t\n\t\t\n