正则表达式初学者混乱

时间:2012-05-03 00:14:45

标签: c# regex

输入:

您好我的名字是 X 。 Blah Blah Blah

编辑1:任何用户都可以输入用X替换的名称。所以 X 是一个变量长度的变量。

必填项:

您好我的名字是艾哈迈德 其中X = Ahmed

模式:

(Hello my name is .+)\.

真的,这是一个新手问题:(我刚开始学习。
不工作!

3 个答案:

答案 0 :(得分:2)

我真的不知道你的模式试图完成什么,所以我将从头开始。你想要做的是匹配Hello my name is X。我们可以这样做。

/Hello my name is X\./

但是我们不想捕获字母 X,我们希望匹配X的位置。所以现在我们的正则表达式变成了。

/Hello my name is .+\./

所以前正则表达式现在匹配任何一个或多个字符。现在我们想捕获它并在正则表达式之外使用它。我们可以使用捕获()运算符来执行此操作。

/Hello my name is (.+)\./

现在的问题是,“我们如何获得捕获?”好Regex.Match会返回Match。现在Match有一个名为Groups的属性,它是正则表达式中所有捕获的集合。所以我们的最终代码是。

var match = Regex.Match("Hello my name is dunsmoreb.", @"Hello my name is (.+)\.");
Console.WriteLine(match.Groups[1]); // Prints `dunsmoreb`.

答案 1 :(得分:1)

当你看到带有反斜杠的正则表达式时,需要将正则表达式引擎解释为字面反斜杠。这意味着,如果您的编程语言使用\进行字符串转义,则对于正则表达式中的每个\,您的字符串中都需要\\

例如,要使用正则表达式Hello my name is (.+)\.,您可能需要使用以下字符串:

"Hello my name is (.+)\\."

请注意,这可能不是您想要的正确的正则表达式,例如使用类似“Hello我的名字是Ahmed.Blah blah”的字符串。你会得到“艾哈迈德。布拉赫”这个名字,因为(.+)是贪婪的。您可以将(.+)更改为(.+?)来解决此问题,但如果.是名称中的有效字符(例如“JRR Tolkien”),则会遇到类似问题不够匹配。

答案 2 :(得分:0)

使用以下内容:

Hello my name is (\w+)

(\w+)匹配构成单词的字符。如果名称中的空格为“John Doe”,则只会匹配“John”

在此处查看有关正则表达式用法的更多说明:http://msdn.microsoft.com/en-us/library/az24scfc.aspx