C# 在Perl中,您使用括号来提取匹配项,这与c中的匹配项是等价的#

C# 在Perl中,您使用括号来提取匹配项,这与c中的匹配项是等价的#,c#,regex,perl,C#,Regex,Perl,例如,在Perl中,我可以 $x=~/$(\d+)\s/这基本上是说从变量x中查找前面有$sign,后面有空格字符的任何数字。现在1美元等于这个数字。 在C#中,我尝试了 首先,您的regex here$(\d+)\s实际上意味着:在字符串末尾找到一个数字。它永远也比不上。您必须转义$,因为它是元字符 无论如何,这方面的等效C#是: var match = Regex.Match(text, @"\$(\d+)\s"); if (match.Success) { var number =

例如,在Perl中,我可以
$x=~/$(\d+)\s/
这基本上是说从变量x中查找前面有$sign,后面有空格字符的任何数字。现在1美元等于这个数字。 在C#中,我尝试了


首先,您的regex here
$(\d+)\s
实际上意味着:在字符串末尾找到一个数字。它永远也比不上。您必须转义
$
,因为它是元字符

无论如何,这方面的等效C#是:

var match = Regex.Match(text, @"\$(\d+)\s");
if (match.Success)
{
    var number = match.Groups[1].Value;
    // ...
}
为了更好地维护,可以将组命名为:

var match = Regex.Match(text, @"\$(?<number>\d+)\s");
if (match.Success)
{
    var number = match.Groups["number"].Value;
    // ...
}
var match=Regex.match(文本,@“\$(?\d+)\s”);
如果(匹配成功)
{
变量编号=匹配。组[“编号”]。值;
// ...
}
在这种特殊情况下,您甚至不必首先使用组:

var match = Regex.Match(text, @"(?<=\$)\d+(?=\s)");
if (match.Success)
{
    var number = match.Value;
    // ...
}

var match=Regex.match(text,@)(?使用
match
方法而不是
IsMatch
,您需要转义
$
以逐字匹配它,因为它是一个具有特殊意义的字符,意思是“字符串结束”


要获得匹配结果,请使用
Match
而不是
IsMatch

var regex = new Regex("^[^@]*@(?<domain>.*)$"); 
// accessible via 
regex.Match("foo@domain.com").Groups["domain"]
// or use an index
regex.Match("foo@domain.com").Matches[0]
var regex=new regex(“^[^@]*@(?.*)$”;
//可通过
regex.Match(“foo@domain.com“”。组[“域”]
//或者使用索引
regex.Match(“foo@domain.com)匹配[0]

@AvinashRaj,我提供的正则表达式只是从电子邮件地址中提取域的一个示例。(我不建议使用它,因为电子邮件解析是一件很难正确完成的事情,但它可以作为一个示例)一个未转义的美元符号如何与字面上的美元符号匹配?只提供关于这个问题的答案,它会让未来的读者感到困惑。我想你的意思是
^[^$]*$(*)$
。但这是错误的,因为没有未替换的
$
符号。这不会满足
查找任何前面有$符号,后面有任何空格字符的数字。
条件。@AvinashRaj,我没有以任何方式处理他的正则表达式。他没有问如何在美元符号后提取数字,他问的是C#访问方式s匹配组的值。如果我必须查找美元金额,我将使用
\$(?\s*\d+(\.\d+))
@AvinashRaj,不,如果他想得到关于特定正则表达式的帮助,他应该发布一个特定的问题来请求。请看。我不关心他的正则表达式的正确性,因为他似乎熟悉perl正则表达式,大概会理解他所犯的错误。他请求帮助获得C#中的匹配值。谢谢@Lucas我完全放弃了是的,我知道这是正则表达式中的结束符。当我处理金钱符号时,我从来没有想到过它。
Match m = Regex.Match(s, @"\$(\d+)\s");
if (m.Success) {
    Console.WriteLine(m.Groups[1].Value);
} 
var regex = new Regex("^[^@]*@(?<domain>.*)$"); 
// accessible via 
regex.Match("foo@domain.com").Groups["domain"]
// or use an index
regex.Match("foo@domain.com").Matches[0]