2012-05-03 170 views
0

输入:正则表达式初学者混淆

你好,我的名字是X。等等等等等等

编辑1:任何用户都可以输入他的名字X.取代所以X是可变lenght的变量。

所需的输出:

你好,我的名字叫艾哈迈德
其中X =艾哈迈德

模式:

(Hello my name is .+)\. 

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

+0

那么你是否试图让所有的输入达到并包括'X'如果'X = Ahmed'? – kaveman

+0

@kaveman是的,编辑1; –

+0

这是一个有用的RegEx测试网站:http://gskinner.com/RegExr/ – kaveman

回答

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`. 
+0

对不起,'/'操作是什么? –

+0

这只是标记正则表达式的开始和结束。在.NET中这不是必需的。 – 2012-05-03 00:28:18

+0

我测试过了。它给我错误,因为\。所以我在模式字符串的开头加入了@,然后它不起作用! –

0

使用下列内容:

Hello my name is (\w+) 

(\w+)匹配形成一个单词字符。如果你有在名称中的空格说“李四”,这将在这里只匹配“约翰”

查找在正则表达式使用更多的解释:http://msdn.microsoft.com/en-us/library/az24scfc.aspx

+0

对不起,但我必须完整地包括他的名字。 –

1

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

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

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

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

+0

:)赞赏:) –

+0

你也可以用'@'作为你的字符串的前缀。 – 2012-05-03 00:46:13