Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas:str.contains使用正则表达式_Python_Regex_Pandas - Fatal编程技术网

Python Pandas:str.contains使用正则表达式

Python Pandas:str.contains使用正则表达式,python,regex,pandas,Python,Regex,Pandas,我有数据帧,我需要用正则表达式过滤它 数据帧: domain tag1 0 ^mail.ru/search Сервис 1 go.mail.ru$ Веб-портал 2 vk.com/audios Социальное 3 vk.

我有数据帧,我需要用正则表达式过滤它

数据帧:

                  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]$')]
它返回空的数据帧

如何解决此问题?

您可以尝试以下方法:

df.domain.str.extract('(\w+\.)?(\w+\.\w+)', expand=False)[1]
输出:

0      mail.ru
1      mail.ru
2       vk.com
3       vk.com
4       vk.com
5       vk.com
6    yandex.ru
7    yandex.ru
8    yandex.ru
Name: 1, dtype: object
使用命名组并丢弃“子域”组,进行少量清理,以进行修改:

df.domain.str.extract('(?P<subdomain>\w+\.)?(?P<domain>\w+\.\w+)',expand=False)['domain']
df.domain.str.extract('(?P\w+\)?(?P\w+\。\w+),expand=False)['domain']

为什么要使用这样的范围<代码>\w。另外,转义句点或将其视为通配符:
\。
如@TheIncorrigible1所述,对第一组使用
[\w-]
,对文字点使用
\。
而不是除换行符以外的任何字符(除非使用了
s
修饰符)。您也可以对第二组使用
[^\W\]
<代码>^[\w-]+\.[^\w\u]$我只需要域,不需要域subdomain@PetrPetrov如果你认为它已经回答了你的问题,请考虑/回答