【问题标题】:deleting the rest of lines after specific charactar删除特定字符后的其余行
【发布时间】:2021-01-03 17:29:27
【问题描述】:

例如,我有一个具有相同数据格式的文件

DATA102:991n| DATA | Data222
DATA10:22 | DATA | Data222
DATA102:991 | DATA | Data222
DATA10:22 | DATA | Data222
DATA102:991 | DATA | Data222
DATA10:22 | DATA | Data222

我想删除“|”之后的所有内容,例如我想要这个输出

DATA102:991n
DATA10:22 
DATA102:991 
DATA10:22 
DATA102:991 
DATA10:22 

我如何使用正则表达式来实现? 我尝试查找:(.*|).* 然后替换 /1

但它不起作用我想删除|之后的所有内容

【问题讨论】:

  • 匹配/ *\|.*/并替换为空字符串
  • @anubhava 不起作用,你能把它作为答案并测试它吗?
  • 不要在记事本++中使用/。只需<space>*\|.* 使用空格而不是<space>
  • @anubhava 仍然没有工作
  • @hewman 有几个解决方案应该适合您,它们如下所示。但是,您拥有的文本实际上可能与您共享的文本不同。你确定有常规空间吗?有标签吗?软空间?单词之间是否有任何不可见的字符,例如 ZWJ(零宽度连接符)?我suggested[ \t]*\|.*,但你不妨试试[^\S\r\n]*\|.*,甚至[^\w|\r\n]*\|.*

标签: regex notepad++ emeditor


【解决方案1】:
  • Ctrl+H
  • 查找内容:^[^|]+\K.*$
  • 替换为:LEAVE EMPTY
  • 检查 环绕
  • CHECK 正则表达式
  • 取消选中 . matches newline
  • 全部替换

说明:

^           # beginning of line
    [^|]+       # 1 or more any character that is not a pipe
    \K          # forget all we have seen until this position
    .*          # 1 or more any character but newline
$           # end of line

屏幕截图(之前):

截图(之后):

【讨论】:

    【解决方案2】:

    你可以使用

    查找内容:     [ \t]*\|.*
    替换为

    请参阅regex demo详情

    • [ \t]* - 零个或多个空格或制表符
    • \| - 一个 | 字符
    • .* - 尽可能多的零个或多个除换行符以外的字符。

    【讨论】:

      【解决方案3】:

      如果您有相同格式的数据,另一种选择是使模式更具体地匹配单词字符、冒号和管道。

      在替换中使用空字符串。

      ^\w+:\w+\K\h*\|.*
      

      说明

      • ^ 字符串开始
      • \w+:\w+ 在 1+ 个单词字符之间匹配 :
      • \K清除匹配缓冲区(忘记匹配到现在保留它)
      • \h*\|.* 匹配 0+ 个水平空白字符、| 以及要删除的行的其余部分

      【讨论】:

        猜你喜欢
        • 2022-12-03
        • 2019-03-15
        • 2015-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-01-10
        • 1970-01-01
        相关资源
        最近更新 更多