输入:正则表达式初学者混淆
你好,我的名字是X。等等等等等等
编辑1:任何用户都可以输入他的名字X.取代所以X是可变lenght的变量。
所需的输出:
你好,我的名字叫艾哈迈德
其中X =艾哈迈德
模式:
(Hello my name is .+)\.
真的,这是一个新手的问题:(, ,我刚开始学习。
不工作!
输入:正则表达式初学者混淆
你好,我的名字是X。等等等等等等
编辑1:任何用户都可以输入他的名字X.取代所以X是可变lenght的变量。
所需的输出:
你好,我的名字叫艾哈迈德
其中X =艾哈迈德
模式:
(Hello my name is .+)\.
真的,这是一个新手的问题:(, ,我刚开始学习。
不工作!
我真的不知道你的图形试图完成,所以我会从头开始。你想要做的就是匹配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`.
对不起,'/'操作是什么? –
这只是标记正则表达式的开始和结束。在.NET中这不是必需的。 – 2012-05-03 00:28:18
我测试过了。它给我错误,因为\。所以我在模式字符串的开头加入了@,然后它不起作用! –
使用下列内容:
Hello my name is (\w+)
(\w+)
匹配形成一个单词字符。如果你有在名称中的空格说“李四”,这将在这里只匹配“约翰”
查找在正则表达式使用更多的解释:http://msdn.microsoft.com/en-us/library/az24scfc.aspx
对不起,但我必须完整地包括他的名字。 –
当你看到在它反斜杠,这将需要解释为正则表达式引擎反斜线正则表达式。这意味着如果您的编程语言使用\
进行字符串转义,则对于正则表达式中的每个\
,您需要在字符串中使用\\
。
例如,使用正则表达式Hello my name is (.+)\.
,您可能需要使用以下字符串:
"Hello my name is (.+)\\."
注意,这可能不是你想要的确切正则表达式,例如使用像“你好,我的字符串名字是艾哈迈德,布拉等等。“你会得到“Ahmed。Blah blah”作为名字,因为(.+)
是贪婪的。您可以将(.+)
更改为(.+?)
以解决此问题,但如果.
是某个名称中的有效字符(例如“J.R.R.Tolkien”),则会遇到类似问题,但您的匹配不够。
:)赞赏:) –
你也可以用'@'作为你的字符串的前缀。 – 2012-05-03 00:46:13
那么你是否试图让所有的输入达到并包括'X'如果'X = Ahmed'? – kaveman
@kaveman是的,编辑1; –
这是一个有用的RegEx测试网站:http://gskinner.com/RegExr/ – kaveman