【发布时间】:2018-04-30 05:45:24
【问题描述】:
我有数据框,我需要使用正则表达式对其进行过滤。
数据框:
domain tag1
0 ^mail.ru/search Сервис
1 go.mail.ru$ Веб-портал
2 vk.com/audios Социальное
3 vk.com/video Социальное
4 vk.com/apps Социальное
5 vk.com Социальное
6 ^yandex.ru/search Сервис
7 ^yandex.ru/pogoda Сервис
8 ^yandex.ru$ Веб-портал
我只需要获取域
我尝试使用
def get_domain_encoding(df):
return df[df.domain.str.contains(r'[a-zA-Z0-9-_]+.[a-zA-Z0-9]')]
它还给我
domain tag1
0 ^mail.ru/search Сервис
2 vk.com/audios Социальное
3 vk.com/video Социальное
4 vk.com/apps Социальное
5 vk.com Социальное
6 ^yandex.ru/search Сервис
7 ^yandex.ru/pogoda Сервис
8 ^yandex.ru$ Веб-портал
当我把它改成
def get_domain_encoding(df):
return df[df.domain.str.contains(r'^[a-zA-Z0-9-_]+.[a-zA-Z0-9]$')]
它返回空数据框。
我该如何解决这个问题?
【问题讨论】:
-
你为什么要使用这样的范围?
\w。另外,请避开您的句号,否则它会被视为通配符:\. -
正如@TheIncorrigible1 提到的,使用
[\w-]代替第一组,使用\.作为文字点而不是除换行符以外的任何字符(除非使用s修饰符)。您也可以将[^\W_]用于第二组。^[\w-]+\.[^\W_]$