【问题标题】:Regex : "Does Not Contain String" for Multiple Matches正则表达式:“不包含字符串”用于多个匹配项
【发布时间】:2022-08-04 07:58:49
【问题描述】:

我有一大段文字。 我假设 s1 = \"开始字符串\" 和 s2 = \"结束字符串\" 被包含在内。 我想匹配以 s1 开头并以 s2 结尾的所有内容,但不包括 s3 = \"不包括字符串\" . 我希望不包括 s3 的每个组都是单独的匹配项。

示例字符串:

开始字符串dfasdfend字符串start stringstart stringstart stringstart stringstart stringstart stringaokfhhflasjfipdfj asdjpfkjdasfstart stringstart stringdo not include stringstart string开始串尾字符串

它不应该返回:

start stringdfasdfend stringstart stringstart stringstart stringstart stringstart stringstart stringaokfhhflasjfipdfj asdjpfkjdasf起始字符串起始字符串不包括字符串起始字符串起始字符串结束字符串

    标签: c# regex vb.net


    【解决方案1】:

    TLDR:

    ((((开始字符串。*结束字符串)(?<!(开始字符串。*不包括字符串。*结束字符串)))|((?!(开始字符串。*不包括字符串。*结束字符串)) (开始字符串。*结束字符串)))

    分两种情况,

    T1 = ((开始字符串。*结束字符串)(?<!(开始字符串。*不包括字符串。*结束字符串)))

    T2 = ((?!(开始字符串。*不包括字符串。*结束字符串))(开始字符串。*结束字符串))

    T1 适用于我们想要 S1 和 S2 的情况才不是包含 S3,就像我最初的问题一样,在正文结束之前或者S1 和 S2 的情况包含 S3。

    T2 用于 S1 和 S2 时不要在文本开头后包含 S3或者在 S1 和 S2 的情况之后包含 S3。

    E1 =(开始字符串。*结束字符串)

    E2 =(开始字符串。*不包括字符串。*结束字符串)

    M1 = ?<!

    M2 = ?!

    E1 是我们想要的情况,M1 为我们提供了我们不想要的情况 E2 出现的索引或字符串的结尾。通过将其封装在括号中,我们只是在文本中选择了一个序列。我们并不是要验证整个字符串。

    M2 为我们提供了文本开头或我们不想要的字符串 E2 出现之后的索引。

    我希望这有帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-21
      • 1970-01-01
      • 2015-02-26
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-13
      • 1970-01-01
      相关资源
      最近更新 更多