【问题标题】:Regular expression always get if there正则表达式总是得到如果有
【发布时间】:2017-06-21 01:21:35
【问题描述】:

我必须解析一个带有一些文本的字符串,可能还有一个 url,用一些空格分隔,例如:

Hello, World! https://example.com/123456
Hello, World!

我试过了

^(.*)\s(https://example\.com/.+)?$

但这会忽略 url,如果找到它,会将其与文本的其余部分放在一起。

我怎样才能改变它,以便它总能找到网址(如果它在那里)?

【问题讨论】:

  • 您是否必须一次完成所有操作,在这样的单个正则表达式中?分多个步骤进行可能会更容易......
  • https://example\.com/.+ 是匹配 url 的部分(虽然你可能需要 https://example\.com/[^ ]+ 在你的情况下),为什么你需要其他的东西?
  • 为我工作。你如何使用它?什么语言/工具
  • 您的 URL 后面是否有尾随空格?这将导致 URL 被贪婪的.* 匹配,而不是可选的 URL 部分。

标签: python regex python-3.5


【解决方案1】:

你的问题是.* 的第一个词是贪婪,并且会消耗所有的输入,留下任何东西来匹配 URL。改用不情愿量词.*?

^(.*?)\s*(https://example\.com/.+)?$

我也将空格设置为可选,否则纯文本需要有尾随空格才能匹配,这是不正确的。

live demo

【讨论】:

  • 非贪婪匹配没有影响;两个组之间的 \s 足以阻止贪婪匹配也包含 URL,除非字符串有尾随空格。
  • @chepner 只是看着它,所需的空格意味着非 URL 大小写将不匹配,除非它有尾随空格,这听起来不对。我已将空格设为可选,这在演示链接中似乎可以正常工作
  • 太棒了。那么你可能应该accept它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-24
  • 1970-01-01
  • 2012-05-31
  • 2011-12-13
相关资源
最近更新 更多