2012-05-03 120 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