regex 从字符串列中提取反斜杠之间的值

4ioopgfo  于 2023-06-25  发布在  其他
关注(0)|答案(3)|浏览(119)

使用Python 3.10有一个列,它的值存储在URL字符串中,我希望提取两个反斜杠之间的数值以及结构化列中的行ID。
进行反斜杠的值是有条件的,并且可以是“DomainId”、“DomainainSiteId”等。并且URL还可以在长度和字符方面稍微变化。最后,反斜杠之间的数值长度可能变化5 - 9字节,但总是在斜杠之间。
id url
https://company.db.abcd.com/DomainId/123456789/Otherhttps://company.db.abcd.com/DomainainSiteId/123456/Otherhttps://companyaddedwords.db.abcd.com/DomainId/1234567/Other
在制品df.url.str.extract('\w/(?P.+)\Z’,expand=True)
看起来不知道如何使用终止符来提取数值,Regex想知道findall是否是更好的选择

Expected Output
id  DomainId  DomainSiteId  
1   123456789  
2              123456  
3   1234567

Current Output
DomainId
DomainId/123456789/Other
DomainSightId/123456/Other
DomainId/1234567/Other
vnzz0bqm

vnzz0bqm1#

您可以使用两个命名的捕获组,用(?P<groupname>...)表示,并使用|交替捕获两个变体:

/DomainId/(?P<DomainId>\d{5,9})\b|/DomainainSiteId/(?P<DomainainSiteId>\d{5,9})\b

Regex demo

pattern = r'/DomainId/(?P<DomainId>\d{5,9})\b|/DomainainSiteId/(?P<DomainainSiteId>\d{5,9})\b'
df = df.url.str\
    .extract(pattern)\
    .fillna('')
print(df)

输出量

DomainId DomainainSiteId
0  123456789                
1                     123456
2    1234567
2exbekwf

2exbekwf2#

您可以尝试使用.str.extract,然后透视数据框:

x = df['url'].str.extract(r'([^/]+)/(\d{5,9})')
print(x.pivot(columns=0, values=1).fillna(''))

图纸:

0   DomainId DomainainSiteId
0  123456789                
1                     123456
2    1234567

初始 Dataframe :

url
0          https://company.db.abcd.com/DomainId/123456789/Other
1      https://company.db.abcd.com/DomainainSiteId/123456/Other
2  https://companyaddedwords.db.abcd.com/DomainId/1234567/Other
egdjgwm8

egdjgwm83#

您可以使用以下模式来捕获这两个值。

//.+?/(.+?)/(\d+)/

输出量

DomainId, 123456789
DomainainSiteId, 123456
DomainId, 1234567

相关问题