C# 正则表达式-在字符之前匹配模式

C# 正则表达式-在字符之前匹配模式,c#,regex,C#,Regex,我目前正在用c#构建一个玩具组装程序(浏览这本书) 我需要匹配一个非常简单的模式,我想这将是一个学习一些正则表达式的好时机,但我正在努力 在下面的例子中,我只想匹配“=”前面的字母 M=A D=M MD=A A=D AD=M AMD=A 我得出以下结论: ([A-Z]{1,3})= 但是,这也与我不想要的“=”匹配 我还尝试: ([A-Z^\=]{1,3})= 但我仍然有同样的问题-它也匹配“=”符号 我用它来测试我的正则表达式 任何帮助都将不胜感激。 提前谢谢。您需要一个: 您需要的是一个

我目前正在用c#构建一个玩具组装程序(浏览这本书)

我需要匹配一个非常简单的模式,我想这将是一个学习一些正则表达式的好时机,但我正在努力

在下面的例子中,我只想匹配“=”前面的字母

M=A

D=M

MD=A

A=D

AD=M

AMD=A

我得出以下结论:

([A-Z]{1,3})=
但是,这也与我不想要的“=”匹配

我还尝试:

([A-Z^\=]{1,3})=
但我仍然有同样的问题-它也匹配“=”符号

我用它来测试我的正则表达式

任何帮助都将不胜感激。 提前谢谢。

您需要一个:


您需要的是一个零宽度、前瞻性断言。你可以:

(Match this and capture)(?=before this) (匹配此项并捕获)(?=在此之前) 在您的情况下,这将是:

([A-Z^]{1,3})(?==) ([A-Z^]{1,3})(?=)
下面将对“=”之前的所有内容和之后的所有内容进行分组

([^=]*)=([^=]*)
它是这样写的:


匹配任意数量的非“=”字符,后跟“=”,然后再匹配任意数量的非“=”字符

您还可以将等号放在带有(?:…)


自从我写了本书的这一章以来已经有一段时间了,但我想既然你需要表达式的两个部分,我在=上做了一个拆分,得到了myArray[0]==M,myArray[1]==a

我需要匹配“=”之前的每个字符,所以我想出了这个

.*(?==)=

匹配“=”之前的每个字符,但不匹配“=”

您还需要获取.Groups[1].Value.ToString()以便从“=sign”中获取适当的部分我尝试了您的正则表达式,但它似乎不起作用-可能是站点使用的正则表达式引擎出了问题?不管怎样,我现在已经标出了答案,所以不用担心。不过谢谢。这个正则表达式的问题可能是,如果它是多行的,第二个通配符将匹配当前等号之后的部分、换行符,然后是下一个等号之前的字符。您可能希望在第二对方括号内添加分隔符。非捕获参数不会做任何有用的事情。等号仍将作为整体匹配的一部分被“捕获”,这是OP试图避免的。问题已经得到了充分的回答,我刚刚将
==
与您的表达式匹配,因此它似乎不起作用。谢谢你的参与。现在,当我将行为与适当的答案进行比较时,我发现这不是OP想要的。
([ADM]{1,3})(?:=)
.*(?==)=