Python使用正则表达式提取列中的字符串部分

Python使用正则表达式提取列中的字符串部分,python,regex,string,pandas,Python,Regex,String,Pandas,我有一个名为“Raw”的列,其格式不一致。它包含的字符串如下所示: '(1T XXX, Europe)' '(2T YYYY, Latin America)' '(3T ZZ/ZZZZ, Europe)' '(4T XXX XXX, Africa)' 在“原始”字符串中唯一一致的是它们以一个数字开头,中间包含逗号,后面是空白,它们也包含括号。 现在,我想在我的数据框中创建两个额外的列(Model和Region): df['Model'] = [x.split(',')[0].replace('

我有一个名为“Raw”的列,其格式不一致。它包含的字符串如下所示:

'(1T XXX, Europe)'
'(2T YYYY, Latin America)'
'(3T ZZ/ZZZZ, Europe)'
'(4T XXX XXX, Africa)'

在“原始”字符串中唯一一致的是它们以一个数字开头,中间包含逗号,后面是空白,它们也包含括号。

现在,我想在我的数据框中创建两个额外的列(Model和Region):

df['Model'] = [x.split(',')[0].replace('(', '') for x in df['Raw']]
df['Region'] = [x.split(',')[1].replace(')', '') for x in df['Raw']]
  • “Model”将包含字符串的开头,即第一个括号和逗号之间的所有内容
  • “Region”将包含字符串的结尾,即逗号后的空格和最后一个括号之间的所有内容
如何使用regex实现这一点?

试试这个:
\([^,]*),([^]*)\)


请参阅:

因为只有一个逗号,所有内容都在括号之间,所以在您的情况下,在适当切片后,请使用
.str.split()

model_region = df.Raw.str[1:-1].str.split(', ', expand = True)
但如果你坚持:

model_region = df.Raw.str.extract('\((.*), (.*)\)', expand = True)
然后


Model=re.findall(r)(?如果逗号是字符串部分的可靠分隔符,则不需要regexp。如果df是数据帧:

df['Model'] = [x.split(',')[0].replace('(', '') for x in df['Raw']]
df['Region'] = [x.split(',')[1].replace(')', '') for x in df['Raw']]
如果您想使用regexp,它将如下所示:

s = '(1T XXX, Europe)'
m = re.match('\(([\w\s]+),([\w\s]+)\)', s)
model = m.group(1)
region = m.group(2)
string_list = ['(1T XXX, Europe)',
'(2T YYYY, Latin America)',
'(3T ZZ/ZZZZ, Europe)',
'(4T XXX XXX, Africa)']
df = pd.DataFrame(string_list)
df = df[0].str.extract("\(([^,]*), ([^)]*)\)", expand=False)
df['Model'] = [x.split(',')[0].replace('(', '') for x in df['Raw']]
df['Region'] = [x.split(',')[1].replace(')', '') for x in df['Raw']]
s = '(1T XXX, Europe)'
m = re.match('\(([\w\s]+),([\w\s]+)\)', s)
model = m.group(1)
region = m.group(2)