C# 如何从使用正则表达式在框架内定义的输入字符串中获取字符串

C# 如何从使用正则表达式在框架内定义的输入字符串中获取字符串,c#,regex,C#,Regex,我想从输入字符串中获取特定“帧”中的子字符串。让我们看一个例子 我有以下输入文件: Method(M123426)(123) Method(M123427)(Zeno) Method(M123428)(true) Method(M123429)(444) 我想从第一个匹配项中获取值:m123426123。 所以框架是这样的:“METHOD()()”,我需要括号中的值 我为此创建了一个正则表达式: Match method = Regex.Match(inputString, @"METHOD(

我想从输入字符串中获取特定“帧”中的子字符串。让我们看一个例子

我有以下输入文件:

Method(M123426)(123)
Method(M123427)(Zeno)
Method(M123428)(true)
Method(M123429)(444)
我想从第一个匹配项中获取值:m123426123。 所以框架是这样的:“METHOD()()”,我需要括号中的值

我为此创建了一个正则表达式:

Match method = Regex.Match(inputString, @"METHOD(.+\)\(.+\)");
但这将导致匹配帧本身,而我只需要值。我如何才能做到这一点?

这应该是可行的:

@"Method\((\w+)\)\((\w+)\)"
这应该起作用:

@"Method\((\w+)\)\((\w+)\)"
试试这个:

^Method\((.*?)\)\((.*?)\)
Regexr:

确保启用模式

您需要拉动第一个和第二个捕获组以获取所需的信息。

尝试以下操作:

^Method\((.*?)\)\((.*?)\)
Regexr:

确保启用模式

您需要拉取第一个和第二个捕获组以获取所需的信息。

要获取适当的匹配项,并且仅从第一次出现中获取匹配项,您应该使用
^
行开始:

您应该使用
^
行开始,以获得适当的匹配,并仅从第一次出现时获得匹配:


使用下面的正则表达式并从组索引1和2获取值。还可以打开不区分大小写模式进行不区分大小写的匹配

@"(?is)^METHOD\(([^()]*)\)\(([^()]*)\)"
它应该选择第一个方法,因为点调用模式下的
^
(?s)仅匹配第一行的开头


使用下面的正则表达式并从组索引1和2中获取值。还可以打开不区分大小写模式进行不区分大小写的匹配

@"(?is)^METHOD\(([^()]*)\)\(([^()]*)\)"
它应该选择第一个方法,因为点调用模式下的
^
(?s)仅匹配第一行的开头


我认为这与所有匹配。我认为这与所有匹配。如果您的示例代表了所有可能性,那么您应该能够使用
string.Split
而不是正则表达式来实现这一点。这只是一个示例。我在这里用“M123426”和“123”替换的字符串可能非常复杂。如果您的示例代表了所有可能的情况,那么您应该能够使用
string.Split
而不是正则表达式来实现这一点。这只是一个示例。我在这里用“M123426”和“123”替换的字符串可能非常复杂。这似乎没问题,但为什么我需要在那里打问号?
*?
的意思是“匹配前一个字符零次或多次,但匹配的字符尽可能少。”例如:在
hello world
中,表达式
he.*o
匹配
hello wo
,但是
he.*o
匹配
hello
。这似乎没问题,但为什么我需要在那里打问号?
*?
的意思是“匹配前一个字符零次或多次,但匹配的字符尽可能少。”例如:在
hello world
中,表达式
he.*o
匹配
hello wo
,但是
he.*o
匹配
hello
。谢谢Raj。这也行得通。不幸的是,我不能接受这个答案,因为在你的答案之前已经有了另一个答案。这是你的愿望。。我发布了一个只有正则表达式的解决方案。您不需要添加其他参数。都在一个正则表达式中。谢谢你,拉杰。这也行得通。不幸的是,我不能接受这个答案,因为在你的答案之前已经有了另一个答案。这是你的愿望。。我发布了一个只有正则表达式的解决方案。您不需要添加其他参数。都在一个正则表达式中。