【问题标题】:Find line that does not end in 83 consecutive commas查找不以连续 83 个逗号结尾的行
【发布时间】:2013-06-26 15:16:57
【问题描述】:

我有一个大型 csv 文件,我正在使用记事本 ++ 进行搜索。

寻找正则表达式(或其他方法)以查找不以 83 个连续逗号结尾的行。

我在想这样的事情:

[^,]{83}$

【问题讨论】:

  • 你为什么不试试呢?
  • 试过了,得到了 0 个匹配项......但我不确定 [^,]{83}$ 是我想要的。那是说找到 83 个非逗号然后行尾吗?
  • "是说找到 83 个非逗号然后行尾吗?"是的,是的。
  • 是的,这正是您在问题标题中提到的内容。
  • 不以连续 83 个逗号结尾与以连续 83 个非逗号结尾不同。

标签: regex notepad++


【解决方案1】:

[^,]{83} 的问题在于它要求有 83 个字符,同时没有逗号。因此,如果最后 83 个字符中的任何一个是逗号,则该表达式将失败。使用负前瞻来搜索坏事会更容易,如果找到则失败。

^(?!.*,{83}$)

【讨论】:

  • AFAIK 记事本不支持环视
  • @Bohemian:当前版本可以。
  • 如果您可以访问最新版本的 Notepad++,请使用此解决方案。
  • +1 表示答案,尤其是创建截图的努力 :)
【解决方案2】:

您正在搜索一行末尾的 83 个逗号,但有些可能是逗号。

使用锚定在行尾的look-behind来断言前面的83个字符不是所有逗号(允许一些,但不允许所有):

(?<!,{83})$

【讨论】:

  • 虽然比@Denomales 回答慢得多,但也可以工作。
【解决方案3】:

所以你想要(行首或非逗号字符),后跟不超过 82 个逗号。

(^|[^,]),{,82}

【讨论】:

    【解决方案4】:

    Denomales 是对的,但我会同意:

    ([^,],\{0,82\}|^,{0,82})$

    它匹配以非逗号字符结尾的行,后跟 0 到 82 个逗号之间的任意值,或少于 83 个逗号的整行。

    【讨论】:

    • 第一个选项中不包含第二个选项吗?此外,您可能必须在量词中明确提供0...我现在并不完全确定 Notepad++ 的正则表达式风格,但大多数风格不接受省略第一个数字。
    • 你说得对。我在没有测试的情况下发布是一个错误。我已更新我的回复以使其更准确。
    猜你喜欢
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    • 2020-04-22
    • 1970-01-01
    • 2022-08-21
    • 1970-01-01
    相关资源
    最近更新 更多