我有一个熊猫系列,其中包含各种时区,并且唯一值如下:
{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)
,但它给了我一个错误。
答案 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)