【问题标题】:How to use RegEx to filter links from a html document?如何使用 RegEx 过滤 html 文档中的链接?
【发布时间】:2019-04-08 21:11:42
【问题描述】:

如何使用正则表达式获取文档中的特定链接? 我有一个 html 文件,其中包含混合了一堆 html 代码和其他东西的谷歌驱动器链接。我试图从文本中获取 50 个链接,方法是使用 RegEx 搜索它们的共同关键字 drive, google, & sharing

例如:"https://drive.google.com/file/d/1wXbzf0nvddZ0vlz6-fdN7HV/view?usp=sharing"

我想选择链接的开头和结尾,然后将它们全部复制、粘贴到另一个文件或删除其他内容并将这些链接保留在 html 文档中。

我试过了

http\:\/\/www\.[a-zA-Z0-9\.\/\-]+ & `.*?(http\:\/\/www\.[a-zA-Z0-9\.\/\-]+)`

我尝试了驱动器,结果除了 http 和 www 之外什么都没有找到,结果显示到文件中的其他链接,我不想点击,但至少显示了一些结果,而不是我去寻找我列出的特定关键字。

我不确定这是否是解决此问题的正确方法以及是否应该使用其他方法(例如 javascript)来实现此等。

我在 Mac 上使用 Sublime Text 来尝试解决这个问题。我是正则表达式的新手。

【问题讨论】:

标签: html regex perl sublimetext3 jdownloader


【解决方案1】:

以下应该可以工作:

.*drive.google.com.*sharing
  • . 表示任意字符

  • *前面的字符可以出现多次

【讨论】:

  • 如果我错了,请原谅我。据我所知,我理解的是“。”将其设置为任何字符并且不设置为特定字符,除非我指定这些字符?然后“*”表示任何字符,无论字符串有多长或多远,它都会将它关闭到最后一件事?谢谢你,它适用于一个小文件,但在一个更大的文件中,它也可以抓取其他链接或关键字。示例:<div class="post-body"><rest of the angles will be up soon. And I want to make another 60fps angle but not sure which angle yet.</p><br /><p>link: https://drive.google.com/file/d/oSmNg0pMUhTZl9zRGd2VUE/view?usp=sharing
  • 没关系,我明白你们现在所说的字符是什么意思了。我能够通过在开始时添加更多或特定的关键字来收紧搜索,反之亦然。谢谢!
  • "https.*drive.google.com.*sharing" 这应该可以。 “。”就像一个占位符。它可以是任何字符,但在您的情况下,您不知道中间有多少个空格。这就是为什么您需要附加“*”。这意味着取之前的字符可以出现 0 到 Infinite 次之间。
  • 如果发生这种情况怎么办?在哪里都被选中,然后它也捕获

    ?示例:<p>https://drive.google.com/file/d/0B3GNg0pNzNCWWdFSXNzd00/view?usp=sharing</p><br /><p>https://drive.google.com/file/oSmNg0pNzRjWEFyNDRzam8/view?usp=sharing<br /></p></div> 然后我添加不同的来严格吗?基本上我要问的是我将如何在某些地方停止搜索?如果条件可以在开始 https 并以共享结束,之后什么都没有。

【解决方案2】:

听起来您正试图在 Mac 的某个编辑器中执行此操作,但问题标记为“perl”,因此这是您可以在 Perl 中执行此操作的一种方法。

首先,有一个完整的示例输入和输出有助于确保我们理解所需的行为,所以这里有一个示例输入 test.doc:

<p>https://drive.google.com/file/d/0B3GNg0pNzNCWWdFSXNzd00/view?usp=sharing</p><br /><p>https://drive.google.com/sharing/oSmNg0pNzRjWEFyNDRzam8/view?usp=sharing<br /></p></div>
<p>http://drive.google.com/file/d/0B3GNg0pNzNCWWdFSXNzd00/view?usp=sharing</p><br/><p>https://drive.google.com/file/sharing/view?usp=sharing<br /></p></div>
https://drive.abc.com/file/d/efg/view?usp=sharing
https://drive.apple.com/file/d/abc/efg/view?usp=sharing
https://drive.google.com/file/d/xyz/skipme?usp=sharing https://drive.google.com/file/d/ef/view?usp=sharing 

我假设链接是用空格或 *ml 标签 括起来的。这是一个 Linux one-liner,它将接受输入 test.doc 并输出匹配的 html 链接。 [^\s&lt;&gt;]+ 部分将捕获一个或多个不是空格 \s&lt;&gt; 的字符(即由于 [^ 而导致的否定字符类),以防止它提前运行并匹配同一个链接上的多个链接行:

perl -ne '@m = $_ =~ m{(https?://drive\.google\.com/[^\s<>]+view\?usp=sharing)}g; print "$_\n" for @m;' test.doc

这将给出以下输出:

https://drive.google.com/file/d/0B3GNg0pNzNCWWdFSXNzd00/view?usp=sharing
https://drive.google.com/sharing/oSmNg0pNzRjWEFyNDRzam8/view?usp=sharing
http://drive.google.com/file/d/0B3GNg0pNzNCWWdFSXNzd00/view?usp=sharing
https://drive.google.com/file/sharing/view?usp=sharing
https://drive.google.com/file/d/ef/view?usp=sharing

如果上述内容不能完全满足您的需求,请提供不同的输入/输出文本片段,有人可以插话您如何更改单行以匹配它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-15
    • 2019-08-17
    • 2023-04-07
    • 1970-01-01
    • 2023-03-19
    • 2013-07-10
    相关资源
    最近更新 更多