【问题标题】:What options are there to use variable length capture groups with negative look-behinds in .Net?有哪些选项可以在 .Net 中使用具有负面后视功能的可变长度捕获组?
【发布时间】:2019-07-30 18:46:41
【问题描述】:

我正在解析用户将输入到应用程序中的文本。我需要能够查看用户的正面和负面断言。

例如,如果我的正则表达式是

"(did|will)(?<!\bnot\W+)\s+show\s+dog"  

这些示例与预期不匹配:

did not show dog
did not show
not show dog

这符合预期:

did show dog

这个不匹配,但应该:

show dog

我希望能够将第一个捕获组设为可选,例如使用 ? (did|use) 的限定词?但是,这样做时,它会变成可变长度并中断。

在第一个捕获组是可选的情况下,有哪些选项可以解析上面的示例文本?

我正在使用 .Net 正则表达式引擎。我只能传入正则表达式来确定匹配项。除了正则表达式文本之外,我无法访问任何其他 .Net 参数。

【问题讨论】:

    标签: .net regex regex-lookarounds


    【解决方案1】:

    您需要将\s+(did|will) 组合在一起,否则,当您将捕获组设为可选时,\s+ 需要在show dog 之前有一个空格,这就是它不匹配的原因。

    使用

    \b(?:(did|will)\s+)?(?<!\bnot\W+)show\s+dog\b
    

    请参阅regex demo at the online .NET regex tester

    详情

    • \b - 字边界
    • (?:(did|will)\s+)? - 一个可选的非捕获组,匹配 1 次或 0 次出现
      • (did|will) - 第 1 组:didwill
      • \s+ - 1+ 个空格
    • (?&lt;!\bnot\W+) - 如果紧靠当前位置左侧有一个完整的单词 not 后跟 1+ 个非单词字符,则匹配失败。
    • show\s+dog - show,1+ 个空格,dog
    • \b - 字边界

    【讨论】:

      猜你喜欢
      • 2010-11-27
      • 2022-10-14
      • 2015-05-22
      • 2015-02-18
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      相关资源
      最近更新 更多