0

输入 :

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

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

所需输出:

你好,我的名字是 Ahmed
其中 X = Ahmed

图案 :

(Hello my name is .+)\.

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

4

3 回答 3

2

我真的不知道你的模式试图完成什么,所以我将从头开始。你要做的是匹配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`.
于 2012-05-03T00:22:47.133 回答
1

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

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

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

请注意,这可能不是您想要的确切正则表达式,例如带有“Hello my name is Ahmed. Blah blah”之类的字符串。你会得到“Ahmed. Blah blah”作为名字,因为(.+)它是贪婪的。您可以更改(.+)to(.+?)来解决此问题,但如果.是名称中的有效字符(例如“JRR Tolkien”),您将遇到匹配不足的类似问题。

于 2012-05-03T00:40:34.857 回答
0

使用以下内容:

Hello my name is (\w+)

(\w+)匹配组成单词的字符。如果名称中有空格,请说“John Doe”,这将仅匹配“John”

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

于 2012-05-03T00:22:16.210 回答