【问题标题】:Regex - how do I match this?正则表达式 - 我如何匹配这个?
【发布时间】:2019-01-05 00:00:20
【问题描述】:

我一直在努力让这个正则表达式工作,但显然在这方面还不够好:(

Regex - Trying to extract sources

我认为这会起作用...我正在尝试获取以下所有内容:

  1. 以 ds:// 开头
  2. 以回车或换行结束

就是这样!本质上,我将做一个否定的前瞻,这样我就可以删除所有不符合上述条件的内容(在 Notepad++ 中),这允许正则表达式搜索/替换。

【问题讨论】:

    标签: regex notepad++ regex-lookarounds


    【解决方案1】:
    1. 搜索包含该模式的行并标记它们
      • 搜索菜单 > 标记
      • 查找内容:ds://.*\R
      • 检查正则表达式
      • 勾选标记
      • 全部查找
    2. 删除未标记的行
      • 搜索菜单 > 书签
      • 删除未标记的行

    【讨论】:

      【解决方案2】:

      您无需添加\w 说明符即可在前瞻中ds:// 之后查找单词。在捕获组中删除它并将最终规范从“零或一个回车,然后是零或一个换行符”更改为“回车符或换行符”应该为您完成:

      (?=ds:\/\/).*(?:\r|\n)
      

      更新:不需要捕获回车或换行组。

      更新 2:以下正则表达式实际上适用于您在 cmets 中提出的用例,匹配所有您在问题中描述的模式。

      ^(?:(?!ds:\/\/.*(?:\r|\n)).)*$
      

      【讨论】:

      • 太棒了。这确实找到了所有这些。我本来想改变 ?= 到 ?!本来会反过来(即找到其他所有东西)......我一定错过了一些东西
      • 如果您的目标是找到其他所有内容(不是完全从您的问题中明确),那么您将不得不使用“负面环视”来某种 i> 做你想做的事。查看this detailed post 了解更多信息。如果你想让我试一试,请告诉我。
      • 更新了正则表达式,因为它不需要捕获 \n 或 \r 组。
      【解决方案3】:

      您的正则表达式 (?=ds:\w+).*\r?\n? 不匹配,因为内容中有 ds://\w 不匹配正斜杠。要使您的正则表达式工作,您可以将其更改为:

      (?=ds://\w+).*\r?\n?demo可以缩写为ds://.*\R?demo

      请注意,您不必转义正斜杠。

      如果您想进行查找和替换以保留包含 ds:// 的行,您可以使用否定前瞻:

      找到什么

      ^(?!.*ds://).*\R?

      替换为

      留空

      说明

      • ^ 字符串开头
      • (?!.*ds://) 否定前瞻断言字符串不包含 ds://
      • .* 匹配任意字符 0+ 次
      • \R? 一个可选的 unicode 换行序列,如果最后一行没有后跟换行符,它也匹配最后一行

      Regex demo

      【讨论】:

        【解决方案4】:

        给你,安德鲁:

        正则表达式: ds:\/\/.*

        链接: https://regex101.com/r/ulO9GO/2

        如果有任何问题,请告诉我。

        【讨论】:

        • 不回答问题。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-19
        • 1970-01-01
        • 2018-08-24
        • 2016-03-15
        • 2018-10-05
        • 1970-01-01
        相关资源
        最近更新 更多