输入 :
你好,我的名字是X。等等等等等等
编辑 1:任何用户都可以输入他的名字替换为 X。所以X是一个长度可变的变量。
所需输出:
你好,我的名字是 Ahmed
其中 X = Ahmed
图案 :
(Hello my name is .+)\.
真的,这是一个新手问题:(,,我刚开始学习。
不工作!
我真的不知道你的模式试图完成什么,所以我将从头开始。你要做的是匹配Hello my name is X
。我们可以这样做。
/Hello my name is X\./
但是我们不想捕获字母X,我们想匹配 X 的位置。所以现在我们的正则表达式变成了。
/Hello my name is .+\./
所以以前的正则表达式现在匹配任何字符一次或多次。现在我们要捕获它并在正则表达式之外使用它。我们可以使用 capture, ()
, 操作符来做到这一点。
/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`.
当您看到一个带有反斜杠的正则表达式时,正则表达式引擎需要将其解释为文字反斜杠。这意味着,如果您的编程语言\
用于在字符串中转义,则对于\
正则表达式中的每个,您都需要\\
在字符串中。
例如,要使用正则表达式Hello my name is (.+)\.
,您可能需要使用以下字符串:
"Hello my name is (.+)\\."
请注意,这可能不是您想要的确切正则表达式,例如带有“Hello my name is Ahmed. Blah blah”之类的字符串。你会得到“Ahmed. Blah blah”作为名字,因为(.+)
它是贪婪的。您可以更改(.+)
to(.+?)
来解决此问题,但如果.
是名称中的有效字符(例如“JRR Tolkien”),您将遇到匹配不足的类似问题。
使用以下内容:
Hello my name is (\w+)
(\w+)
匹配组成单词的字符。如果名称中有空格,请说“John Doe”,这将仅匹配“John”
在此处查看有关正则表达式用法的更多说明:http: //msdn.microsoft.com/en-us/library/az24scfc.aspx