在pandas

时间:2016-12-14 11:15:32

标签: python regex pandas

我有一个文本列,如下所示:

http://start.blabla.com/landing/fb603?&mkw...

我想提取" start.blabla.com" 总是介于:

之间
http://

和:

/landing/

即:

start.blabla.com

我做:

df.col.str.extract('http://*?\/landing')

但它不起作用。 我做错了什么?

2 个答案:

答案 0 :(得分:7)

您的正则表达式匹配http:/,然后匹配尽可能少的0 + /个符号,然后/landing

您需要在http://之后/之后匹配并捕获字符(The extract method accepts a regular expression with at least one capture group.),一次或多次。可以用

完成
http://([^/]+)/landing
       ^^^^^^^

其中[^/]+negated character class,匹配/以外的1个以上字符。

请参阅regex demo

答案 1 :(得分:1)

只是回答一个你没有问过的问题,如果你想将字符串的几个部分提取到不同的列中,你可以这样做:

df.col.str.extract('http://(?P<Site>.*?)/landing/(?P<RestUrl>.*)')

您可以获得以下内容:

               Site        RestUrl
0  start.blabla.com  fb603?&mkw...

要了解这个正则表达式(以及任何其他正则表达式)是如何构建的,我建议你看看优秀的网站regex101。我构建了一个片段,您可以在其中看到上面的正则表达式here