C#中有点复杂的正则表达式,可以不使用lookaheads/lookbehinds吗?如果没有,他们怎么办?

C#中有点复杂的正则表达式,可以不使用lookaheads/lookbehinds吗?如果没有,他们怎么办?,c#,regex,C#,Regex,这是我目前在C中的正则表达式# “(?“+word++”[\n]+模块标识(?[“+anySymbol++”]*?)::=[\n]*{[\n]*“+”(?“+word+++”(?“+word 以下是关于每件事的解释,其实并不复杂: ?,?等仅用于命名变量 word和anySymbol是保存特定符号的字符串。在word中,它是\w、-和”。在anySymbol中,它几乎是每个字符 MODULE-IDENTITY是要搜索的关键字 之后的::=是要查找的第二个关键字 现在,复杂部分出现在模块标识

这是我目前在C中的正则表达式#

“(?“+word++”[\n]+模块标识(?[“+anySymbol++”]*?)::=[\n]*{[\n]*“+”(?“+word+++”(?“+word
以下是关于每件事的解释,其实并不复杂:

  • 等仅用于命名变量
  • word
    anySymbol
    是保存特定符号的字符串。在
    word
    中,它是
    \w
    -
    。在
    anySymbol
    中,它几乎是每个字符
  • MODULE-IDENTITY
    是要搜索的关键字
  • 之后的
    ::=
    是要查找的第二个关键字

现在,复杂部分出现在
模块标识
之后和
之前的部分中::=
可以出现
::=
,但它们只会出现在双引号内
“在这里”
。现在我想要的是忽略引号内的
:=
有人有主意了吗?

根据我在评论中的regex101链接,我制作了这个正则表达式,它可以匹配
:=
:=
的多个实例

导入(?((?!:=)|“[^”]*”)::=
我不太明白它是如何与您原来的C代码联系在一起的,但这应该会帮助您走上正确的道路。基本上,它是在导入后这样说的:

  • [^:”]
    任何不是
    的字符:
  • |
  • :(?!:=)
    一个
    不是
    ,后面跟着
    :=
    (一起生成您不想匹配的
    :=
  • |
  • “[^”]*”
    一个
    后面跟着任何不是
    (但很可能是
    :=
    )的东西,后面跟着
整个过程被放入一个
(?:…)
组,该组可以重复0次或更多次,其结果被捕获为

一些一般提示:

  • 你可以编辑你的问题,使用它!:)添加regex101链接,添加你要开始的文本,添加你想要找到的精确匹配(不是描述,而是实际匹配)
  • 避免使用
    而使用负类(
    [^…]

你是在尝试匹配还是提取?@merlin2011我猜,我会在一个大文本中获取所有匹配,然后从中提取所有数据matches@l'L'L确切位置?您将用
(?::=)替换
:=
在您的模式中。它本质上意味着匹配,但不捕获。因此它将看到它并跳过它进入下一个匹配。看看这个示例:好吧,这一切都取决于;我不知道您的原始字符串是什么样子。但如果您在整个过程中都有倍数,则可能需要我建议的内容之外的内容。
"(?<name>" + word + @"[ \n]+MODULE-IDENTITY(?<data>[" + anySymbol + @"]*?)::=[ \n]*\{[ \n]*" + "(?<parent>" + word + " " + "(?<oid>" + word
IMPORTS(?<data>(?:[^:"]|:(?!:=)|"[^"]*")*)::=