如何在正则表达式周围选择整个实体而不首先拆分字符串?

2024-06-16 11:10:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我的项目(与这个问题无关,只是上下文)是一个ML分类器,我正在尝试改进它,发现当我从提供给它的文本中剥离url时,一些url被空格打断了。例如:

https:// twitter.com/username/sta tus/ID

当我删除了没有断开的链接后,我就只剩下像www.com这样的想法了。我用Python中的以下正则表达式删除了这些表达式:

tweet = re.sub('(www|http).*?(org |net |edu |com |be |tt |me |ms )','',tweet);

我在每一个链接后面都加了一个空格,因为这是在常规的条带和文本处理之后发生的(所以只处理URL中由空格分隔的部分),理论上我们应该只提取断开链接的剩余部分。。。不是这样的

http website strangeTLD .... communication

这不是完美的,但它的工作,但我只是想,我可能会尝试先发制人删除网址从twitter只,因为我知道,空间打破了常规的网址带将永远在同一个地方,希望这能提高我的分类精度?这将删除链接后出现的字符串。。。特别是图片,这是我的很多资料。你知道吗

具体来说,有没有一种方法可以选择实体的周围/后面:

pic.twitter.com/

或者,参考我前面给出的示例,选择用户名后面的实体,并在status中用空格分隔(我只是猜测这个regex)。。。你知道吗

http.*?twitter.com/*?/sta tus/

提前谢谢!作为记录,我得到了这个数据集;我不知道为什么url几乎都被空格打断了。你知道吗


Tags: 项目实体comhttpurl链接wwwtwitter
1条回答
网友
1楼 · 发布于 2024-06-16 11:10:35

是的,您所说的内容称为正向lookback并使用(?<=...),省略号应该替换为您要跳过的内容。你知道吗

例如,如果您想在https://twitter.com/username/status/ID中选择username后面的内容,只需使用

(?<=https:\/\/twitter\.com\/username\/).*

你会得到status/ID,就像你看到的live demo。你知道吗

在本例中,我必须按照Regex规范的要求,使用反斜杠转义斜杠/;我还使用Kleene star operator,即星号来匹配.(任何字符)的任何出现,就像您所做的那样。你知道吗

正向lookback组合的作用是在光标的当前位置之前指定一些强制文本;换句话说,它将光标放在您输入的表达式之后(如果所述文本存在)。你知道吗

当然,这在您的例子中是不够的,因为username不是固定字符串,而是可变字符串。这可能是一个额外的要求,因为lookbehind不适用于可变长度。 所以你可以跳过www.twitter.com/

(?<=https:\/\/twitter\.com\/).*

然后,通过Python创建一个子字符串

currentText = "username/status/ID"
result = currentText.split("/",1)[1] # returns status/ID

在这个demo(单击“Execute”)中测试它;这个question的答案中简单解释了它的工作原理(简而言之,您只需在第一个斜杠字符处拆分字符串)。你知道吗

作为旁注,URL中不允许空白/空格,如有必要,通常编码为%20+(参见this答案)。换句话说,你得到的每一个网址都可以在处理前安全地去掉空格,所以。。。他们为什么不这么做?你知道吗

相关问题 更多 >