regex 如何找到一对应该始终以连字符开头但其中一行错误地没有以连字符开头的行

lvmkulzt  于 2023-04-22  发布在  其他
关注(0)|答案(1)|浏览(122)

如何搜索总是以连字符开头的行对,但其中一行错误地没有以连字符开头。
我想找到所有用绿色标记的行对:
EXAMPLE
示例文本:
491
2019 - 01 - 15 00:00:00

  • 是吗?
  • 是的我是
    492
    2019 - 01 - 15 00:00:00
  • 是吗?
    是的我是
    493
    2019 - 01 - 15 00:00:00
    是吗?
  • 是的我是
    494
    2019 - 01 - 15 00:00:00
    是吗?
    是的我是
    我的一些尝试。他们给了一些结果,但从来没有完全期望的。
    \-\ [a-zA-Z0-9]+(\n|.)*?\-\
    \-\ [a-zA-Z0-9]+(\n|.)*?^((?!\-).)*$
    \-\ [a-zA-Z0-9]+(\n|.)*?(^((?!\-).))
rqdpfwrv

rqdpfwrv1#

如果我认为非常基础,也许以下就足够了:

^(?!-.+\n-).+\n.+(?=\n\n|\Z)

查看在线demo

  • ^-起始线锚;
  • (?!-.+\n-)-Assert位置的负先行不直接后跟连字符、除换行符以外的1+个字符、一个换行符和另一个连字符;
  • .+\n.+-匹配1+除换行符以外的字符、一个换行符和1+非换行符;
  • (?=\n\n|\Z)-Assert位置的正向前查找后面跟着两个连续的换行符 * 或 * 文本的结尾。

这将简单地突出显示不包含两个连字符的行集。然而,在您的问题中,您确实提到希望突出显示缺少 * 一个 * 连字符的行集。这可能意味着您需要这两行中的一行实际上仍然以连字符开头。如果是这种情况,请尝试:

^(?!-.+\n-)(?=-|.+\n-).+\n.+(?=\n\n|\Z)

唯一的区别是肯定的前向,它Assert直接或在一行文本之后有连字符。

相关问题