我有一个文本列,如下所示:
http://start.blabla.com/landing/fb603?&mkw...
我想提取" start.blabla.com" 总是介于:
之间http://
和:
/landing/
即:
start.blabla.com
我做:
df.col.str.extract('http://*?\/landing')
但它不起作用。 我做错了什么?
答案 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。