输入:
您好我的名字是 X 。 Blah Blah Blah
编辑1:任何用户都可以输入用X替换的名称。所以 X 是一个变量长度的变量。
必填项:
您好我的名字是艾哈迈德 其中X = Ahmed
模式:
(Hello my name is .+)\.
真的,这是一个新手问题:(我刚开始学习。
不工作!
答案 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