【问题标题】:Negative lookahead to exclude whole line based on char set possible?基于字符集排除整行的负前瞻可能吗?
【发布时间】:2016-02-24 01:46:29
【问题描述】:

我在 Notepad++ 中有一个大文本文件,我想在其中找到某些行。假设它看起来像:

我不喜欢数字 1 2 和 3
我也不喜欢大多数符号,! @ 和 # 不好
但我确实喜欢没有数字而只有符号的线条。和 *

在上面我想排除文件中那些有数字和除句点或(比如说)星号之外的所有符号的行。

我现在知道负前瞻/后行不能以这种方式工作,但我的意思是配合一个负前瞻条件,如 (?!=[\d]) 或 [^\d] 与搜索带有 ^[A-Za-z.*\s]+$ 之类的单词的行,但无论它出现在该行的哪个位置,整行都会在否定匹配中被拒绝。

【问题讨论】:

  • 为什么正向匹配不起作用? cat myfile.txt | grep -E '^[A-Za-z*\.\s]+$' > newfile.txt
  • 谢谢,但这是在 Notepad++ 中的......不太了解 Linux!

标签: notepad++ negative-lookahead


【解决方案1】:

您似乎想删除所有不符合^[A-Za-z.*\s]+$ 模式的行。在这种情况下,只需使用

查找内容(^[A-Za-z.*\s]+$\R*)|.*\R*
替换为$1

详情

  • (^[A-Za-z.*\s]+$\R?) - 捕获组 #1(引用 $1 反向引用)匹配:
    • ^ - 行首
    • [A-Za-z.*\s]+ - 1 个或多个字符是 ASCII 字母、.* 或空格 (\s)(替换为 \h 以仅匹配水平 wjitespaces)
    • $ - 行尾
    • \R* - 0 个或多个换行符
  • | - 或
  • .* - 任何 0+ 个字符
  • \R* - 0 个或多个换行符。

$1 在后面插入好行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-03
    • 2017-03-27
    • 1970-01-01
    相关资源
    最近更新 更多