【问题标题】:Python - Remove URLs from text with regexPython - 使用正则表达式从文本中删除 URL
【发布时间】:2013-03-29 20:18:09
【问题描述】:

我的文本中有如下所示的 URL:

<https://buy.itunes.apple.com/WebObjects/MZFinance.woa/wa/reportAProblem?p
=22000073760328&o=i>

我已使用以下模式尝试删除它们:

re.sub(r'\<http.+?\>', '', plain, re.S)

但它不会全部获取,例如,这个不会被删除:

<http://ax.phobos.apple.com.edgesuite.net/email/images_shared/spacer_99999\r\n9.gif>

【问题讨论】:

  • 如果您在分配第二个字符串 (r'&lt;http://ax.phobos.apple.com.edgesuite.net/email/images_shared/spacer_99999\r\n9.gif&gt;') 之前放置 r(原始字符串)或放置双反斜杠 (\\) (&lt;http://ax.phobos.apple.com.edgesuite.net/email/images_shared/spacer_99999\\r\\n9.gif&gt;) 它将起作用
  • 这很奇怪。玩了一会儿,它确实匹配它:re.match(r'.', '\n', re.S) 有效,但re.sub(r'.', '', '\n', re.S) 无效。所以它似乎匹配,但是替换部分以某种方式失败了......真的不确定在哪里或如何。好像 re.S 对re.sub 不起作用。
  • 是的,这就是发生在我身上的事情。一些 URL 被删除,但其他 URL 仍然存在。

标签: python regex url


【解决方案1】:

这样试试

p=re.compile(r'\<http.+?\>', re.DOTALL)
re.sub(p, '', plain)

【讨论】:

  • 这个成功了,谢谢。想补充说明为什么预编译模式有效?
  • 实际上在查看了 re.sub 函数之后,我认为您错过了在 flags 参数之前还有一个额外的参数,所以像 re.sub(r'\&lt;http.+?\&gt;', '', plain, flags=re.S) 这样的东西也应该可以工作。
  • @8vius 由于某种原因,标志被错误地传递了,虽然我真的不知道为什么。这会在模式本身中对标志进行编码。根据文档,re.sub 接受五个参数(模式、复制、str、计数、标志),最后两个是可选的。但是,当我尝试使用 5 个参数调用它时,它告诉我它需要 4 个。在 Python 3 中,当我执行 re.sub(r'.', '', '\n', 0, re.S)re.sub(r'.', '', '\n', flags=re.S) 时它可以工作,尽管在 Python 2 中这两种方法都不适合我,尽管它的文档说。
  • 是的,明确设置标志也可以,谢谢。这就是为什么它适用于预编译的原因。谢谢你们。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-12
  • 2017-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多