【问题标题】:Notepad++ replace lines containing 6 digits and word [duplicate]Notepad ++替换包含6位数字和单词的行[重复]
【发布时间】:2018-12-31 13:01:57
【问题描述】:

所以我得到了这个:

123456asdsa
444444dfsdsdg
3443fsdfdsd
77gdsggfgf

我只想删除任何包含 6 位数字的行,无论字数如何,它可以是这样的:

3443fsdfdsd
77gdsggfgf

我发现的唯一一件事是这个正则表达式 [0-9]{6},它让我只选择 6 位数字但没有单词,所以我该怎么办? 谢谢

【问题讨论】:

  • 如果 6 位数字可以出现在字符串中的任何位置,请使用 .*[0-9]{6}.*\R?。如果您的意思是数字应该出现在行首,请使用^[0-9]{6}.*\R?
  • 您是要选择6位数的行还是删除6位数的行?
  • @Onyambu 问题说i only wish to delete any lines that contain 6 digits
  • 如果一行包含超过6个数字,比如连续7个或8个,是否也应该删除?
  • 1ab2cd3456efg 要不要也删掉呢?

标签: regex notepad++


【解决方案1】:

你可以使用

^(?=\w*\d{6})\S+\s

在该行中先行查找 6 位数字,然后将该行和以下换行符替换为空字符串:

https://regex101.com/r/mz0vMY/2

【讨论】:

  • 此正则表达式将删除行将选择多于 6 位的行,情况不应如此
【解决方案2】:

你可以使用:

^\D*\d{6}(?!\d).* #or ^\D*\d{6}(?=\D).*

在这种情况下,您将看到数字之前是否有任何非数字。当你得到六位数时,确保下一个是非数字。即只选择 6 位数字的行。 7位以上或6位以下不选:

regex Demo

【讨论】:

    【解决方案3】:

    你的要求不是很清楚,所以我给你几个选择,我希望其中一个适合你的需要。

    如果要选择包含 6 个连续数字且没有其他数字的行,可以使用

    ^\D*\d{6}\D*$
    
    ^                      start of line
     \D*                   some optional non-digit, 
        \d{6}              followed by 6 digits, 
             \D*           followed by some optional non-digit 
                $          till end of line
    

    如果要选择包含6位数字的行(不必连续),可以使用这个

    ^(\D*\d){6}\D*$
    
    
    ^                       start of line
     (\D*\d)                group of optional non-digit then 1 digit
            {6}             above group happening for 6 times 
                                (i.e. 6 digits in total)
               \D*$         follow by non-digits till end of line
    

    如果你想选择包含正好 6 位数字的行,你可以

    ^.*(\b|\D)\d{6}(\b|\D).*$
    
    ^.*                              start of line, followed by some chars
       (\b|\D)                       followed word boundary or non-digit
              \d{6}                  6 digits
                   (\b|\D)           followed word boundary or non-digit
                          .*$        followed by some chars till end of line
    

    更新:

    根据@WiktorStribiżew 提供的信息,Notepad++ 可能会以意想不到的方式处理\D,因为它可能会匹配换行符。您可以简单地将上述正则表达式中的 \D 替换为 [^0-9\n\r] 以获得首选行为。

    【讨论】:

    • 请注意,为了获得更好的性能,您可以将( ... ) 组的使用替换为非捕获组(?: ... )
    • 不是我的反对意见,但这个解决方案是错误的,因为 \D 可能匹配换行符并删除不止 1 行包含数字的行。
    • 哦,我没注意它是用于记事本++的。好吧,这很奇怪,其他人都在使用\D \S,尽管它遇到了同样的问题,但不知道为什么我是唯一一个被否决的人:P 无论如何,为了轻松修复 Notepad++,只需将\D 替换为[^0-9\n\r] 应该做这项工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 2020-08-19
    相关资源
    最近更新 更多