从python中的字符串中提取子字符串

时间:2014-07-30 18:50:14

标签: python regex

我有一个.txt文件,格式为:

AED|784|2|United Arab Emirates dirham|United Arab Emirates
AFN|971|2|Afghan afghani|Afghanistan
ALL|8|2|Albanian lek|Albania
AMD|51|2|Armenian dram|Armenia
ANG|532|2|Netherlands Antillean guilder|Curaçao (CW), Sint Maarten (SX)

我想提取每个被'|'删除的子字符串

例如,

var1,var2,var3,var4 = ""

text = "AED|784|2|United Arab Emirates dirham|United Arab Emirates"

text.extract("{0}|{1}|{2}|{3}|{4}", var1, var2, var3, var4)

print(var1) // prints AED

是否有一种简单/有效的方法(可能使用正则表达式)?

3 个答案:

答案 0 :(得分:6)

text = "AED|784|2|United Arab Emirates dirham|United Arab Emirates"

spl = text.split("|")

var1, var2, var3, var4, var5 = spl
print(var1)
print (spl)
AED
['AED', '784', '2', 'United Arab Emirates dirham', 'United Arab Emirates']

答案 1 :(得分:4)

更好的是,不是将CSV-dialect文件作为文本读取,然后尝试弄清楚如何处理它,而是使用csv模块将其作为CSV-dialect文件读取:

with open(textfile, 'rb') as f:
    for row in csv.reader(f, delimiter='|'):
        print row[0]

这将打印'AED',然后打印'AFN',依此类推。

如果您想将其转换为列表列表,那很简单:

with open(textfile, 'rb') as f:
    data = list(csv.reader(f, delimiter='|'))

现在data是:

[['AED', '784', '2', 'United Arab Emirates dirham', 'United Arab Emirates'],
 ['AFN', '971', '2', 'Afghan afghani', 'Afghanistan'],
 ['ALL', '8', '2', 'Albanian lek', 'Albania'],
 ['AMD', '51', '2', 'Armenian dram', 'Armenia'],
 ['ANG', '532', '2', 'Netherlands Antillean guilder',
  'Curaçao (CW), Sint Maarten (SX)']]

这里的主要优点是,如果您后来意识到您的文件有例如某些列值必须被引用,或者可选列留在最后,或者几乎没有其他任何您未提前预料到的当时,您不必返回并编写新的解析器,只需确定需要更改的dialect parameter

或者,如果您希望按名称而不是索引访问列,则可以切换到DictReader,然后返回字典而不是列表。

答案 2 :(得分:0)

通过python的re模块,

>>> import re
>>> text = "AED|784|2|United Arab Emirates dirham|United Arab Emirates"
>>> m = re.findall(r'([^|]+)', text)
>>> m
['AED', '784', '2', 'United Arab Emirates dirham', 'United Arab Emirates']