我被一个问题难住了。我有一个很大的数据框,其中两列是这样的:
pd.DataFrame([['a', 'https://gofundme.com/ydvmve-surgery-for-jax,https://twitter.com/dog_rates/status/890971913173991426/photo/1'], ['b','https://twitter.com/dog_rates/status/890971913173991426/photo/1,https://twitter.com/dog_rates/status/890971913173991426/photo/1'],['c','https://twitter.com/dog_rates/status/890971913173991430/video/1'] ],columns=['ID','URLs'])
我要做的是在每个单元格中只保留包含“twitter”一词的URL,然后删除其余的。其模式是,我想要的url总是包含单词“twitter”,并以“/”+一位数字结尾。如果在同一单元格中有两个相同的URL,则只应保留一个URL。像这样:
Test2 = pd.DataFrame([['a', 'https://twitter.com/dog_rates/status/890971913173991426/photo/1'],
['b','https://twitter.com/dog_rates/status/890971913173991426/photo/1'],
['c','https://twitter.com/dog_rates/status/890971913173991430/video/1'] ],columns=['ID','URLs'])
Test2
我是Python的新手,在google了很多次之后,我开始明白了一个叫做regex的东西是答案,但这就是我要做的。Stackoverflow的一个帖子把我带到了regex101.com,在玩了一番之后,我就来了,它不起作用了:
r’^[https]+(:)(//)(.*?)(/)(\d)’
有人能告诉我怎么解决这个问题吗? 提前谢谢。你知道吗
正则表达式对于这样的任务来说当然很方便。有关详细信息,请参阅this question和regex101等在线工具。你知道吗
您当前的模式不正确,因为:
^
匹配字符串开头的以下模式。你知道吗[https]+
这是一个字符集,意味着它将匹配h
、s
、ps
,因此[]
括号中出现的一个或多个字母的任何组合,而不仅仅是字符串http
和https
,这是您所追求的。你知道吗(:)
您不需要将这个:
放在这里的捕获组中。你知道吗(//)
/
需要在regex中转义,\/
。这里也不需要抓人。你知道吗(.*?)
.*?
组合经常被误用,因为可以使用否定的字符集[^]
。你知道吗(/)
如上所述。你知道吗(\d)
匹配并捕获一个数字。这里的捕获组对于您的任务来说也是多余的。你知道吗可以使用以下表达式:
https?
匹配文字子串http
或https
。你知道吗:\/\/twitter\.com
匹配文字子串://twitter.com
。你知道吗[^,]+
任何不是逗号的东西,一个或多个。你知道吗(?<=\/\d$)
正面回顾。断言在字符串$
的末尾存在一个/
,后跟一个数字\d
。你知道吗正则表达式演示here。你知道吗
Python演示:
印刷品:
相关问题 更多 >
编程相关推荐