【问题标题】:Can someone help me remove everything in a line except my matching regex?有人可以帮我删除除匹配的正则表达式之外的所有内容吗?
【发布时间】:2015-10-06 18:57:37
【问题描述】:

我正在使用 notepad++ 并使用查找和替换来删除一行中的所有内容,但我的字符串找到的匹配项除外。

例如

第 1 行。这是示例。 775 657 7576 采样线1

第 2 行。第二个采样行。 661-525-5366样品线2

第 3 行。第三行示例 466.755.7888。 3号线

使用正则表达式 \d{3}\D?\d{3}\D?\d{4} 匹配上述数字并删除其相关行中的所有其他内容,使其看起来像这样

1 号线。775 657 7576

2号线。661-525-5366

第 3 行。466.755.7888

请帮忙

【问题讨论】:

    标签: regex notepad++


    【解决方案1】:

    实际上,这很容易。只需使用这个正则表达式:

    (?>\d{3}\D?\d{3}\D?\d{4}\K|[\s\S])
    

    它是如何工作的:

    此正则表达式尝试将电话号码与您指定的正则表达式相匹配。如果是,那么它将从与\K 的匹配中删除它。如果没有,那么它只会使用 [\s\S] 捕获 1 个字符(. 的更好版本,因为它也捕获换行符)。

    使用此正则表达式查找其他所有内容并将其替换为空白。

    Regex101

    【讨论】:

      【解决方案2】:
       ^.*?\b(\d{3}\D?\d{3}\D?\d{4})\b.*$
      

      您可以使用它并替换为$1\1.See demo.

      【讨论】:

      • 谢谢。在我这样做之后。我使用 [^0-9\n] 并用任何内容替换,以便得到一个 10 位数字,例如 5554445555,其他一些行给我的数字长度超过 10 个字符或少于 10 个字符。如何删除不完全是 10 个数字的任何内容?
      【解决方案3】:

      这可以使用正则表达式查找和替换中的分组概念来完成。
      将你的行分成 3 部分,然后用你想要的部分替换它。

      查找内容:(^.*)(\d{3}\D?\d{3}\D?\d{4})(.*)

      • 图案之前的部分(^.*)
      • 您的匹配模式(\d{3}\D?\d{3}\D?\d{4})
      • 匹配模式之后(.*)

      替换为:\2

      • 用第二组替换它

      如何做到这一点的快照

      【讨论】:

        猜你喜欢
        • 2018-05-26
        • 1970-01-01
        • 2023-03-10
        • 1970-01-01
        • 2021-05-26
        • 2022-08-21
        • 2017-08-24
        相关资源
        最近更新 更多