2

C# 中有什么方法可以使用正则表达式,但只返回(使用 Regex.Match)正则表达式的一部分?例如,

string input = "Hello my friend!";
string pattern = "\\w+ my friend.";
Console.WriteLine(Regex.Match(input, pattern)); //Returns "Hello my friend!"

但是如果我只想要“你好”,或者只是最后的标点符号呢?我知道我可以做类似 " " (^\\w+甚至.split(' ')[0]只是任何方式来做到这一点,或者只是这样做会更简单my friend.

string input = "Hello my friend!";
string pattern = "\\w+ my friend.";
if (Regex.IsMatch(input, pattern))
{
    Console.WriteLine(input.Split(' ')[0]);
}
else
{
    Console.WriteLine("");
}

(对不起,如果这真的很简单,或者我遗漏了什么,我刚刚开始真正使用正则表达式)

谢谢,

马修

4

4 回答 4

1

除了其他答案中建议的捕获组之外,您还可以使用前瞻。所以你可以使用类似的表达式"\\w+(?= my friend)",整个匹配只会返回\\w+部分。

通常,形式为a(?=b)whereabare 正则表达式的模式仅在其后跟但不匹配a时才匹配。bb

于 2012-04-29T22:11:54.723 回答
0

您可以使用“组”来捕获字符串的特定部分。例如,假设您想在Hello, John!. 我们的正则表达式看起来类似于:

/Hello, (.+)/

( ()group) 运算符捕获其中的任何内容。然后我们可以使用以下代码来获取名称。

var regex = new Regex(@"Hello, (.+)");
var match = regex.Match("Hello, John");

System.Console.WriteLine("Your name is {0}.", match.Groups[1]); // Your name is John.
于 2012-04-29T22:08:23.320 回答
0

我认为您正在寻找在正则表达式中捕获组。您可以使用括号标识捕获组。对于您的特定示例:

string input = "Hello my friend!";
string pattern = "(\\w+) my friend";
var match = Regex.Match(input, pattern);
Console.WriteLine(match.Groups[1]); // Prints "Hello"
于 2012-04-29T22:08:36.400 回答
0

或者你可以用前瞻来做(未经测试,因为我没有任何方法来测试 c#)

"\\w+(?=\\s+my friend)"
于 2012-04-29T22:12:03.483 回答