大熊猫-提取括号之间的特定值

时间:2019-03-27 16:30:20

标签: regex python-3.x pandas

我有一个熊猫系列,其中包含各种时区,并且唯一值如下:

{0: '(GMT-05:00) Eastern Time (US & Canada)',
 1: '(GMT) Greenwich Mean Time : Dublin, Edinburgh, Lisbon, London',
 2: '(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna',
 3: '(GMT) UTC - Coordinated Universal Time',
 4: '(GMT-06:00) Guadalajara, Mexico City, Monterrey',
 5: '(GMT 00:00) Ponta Delgada (Azores)',
 6: '(GMT-05:00) Eastern Time (Cancún, Quintana Roo, Mexico)',
 7: '(GMT-05:00) Indiana (East)',
 8: '(GMT-07:00) Arizona',
 9: '(GMT-06:00) Central Time (US & Canada)',
 10: '(GMT+01:00) Belgrade, Bratislava, Budapest, Ljubljana, Prague',
 11: '(GMT) Casablanca, Monrovia',
 12: '(GMT-02:00) Mid-Atlantic',
 13: '(GMT+08:00) Perth'}

我想从这些字符串中提取GMT部分。我找到的所有答案都是关于从括号中提取字符串,而不是括号之间的特定值。

预期输出:

{0: 'GMT-05:00',
 1: 'GMT',
 2: 'GMT+01:00',
 3: 'GMT',
 4: 'GMT-06:00',
 5: 'GMT 00:00',
 6: 'GMT-05:00',
 7: 'GMT-05:00',
 8: 'GMT-07:00',
 9: 'GMT-06:00',
 10: 'GMT+01:00',
 11: 'GMT',
 12: 'GMT-02:00',
 13: 'GMT+08:00'}

非常感谢您的帮助,因为我对regex不太满意。

已编辑

我已经尝试过s.str.extract('.*\((.*)\).*', expand=True),它使我在括号之间倒数第二个值,因此,如果字符串包含(GMT-05:00) Eastern Time (US & Canada),它将为(US & Canada)。我也尝试过仅搜索s.str.extract('[GMT]', expand=True),但它给了我一个错误。

1 个答案:

答案 0 :(得分:0)

要提取两个括号之间的所有内容,请使用\((.*?)\)

import re
import pandas as pd

data = {} # data dictionary
pattern = "\((.*?)\)"

df = pd.Series(data)
new_data = {}

key = 0
for item in df.items():
    new_data[key] = re.match(pattern, item[1])[1]
    key += 1

print(new_data)

#new_df = pd.Series(new_data)
#print(new_df)

说明:https://regex101.com/r/5XjNqh/1