輸入:正則表達式初學者混淆
你好,我的名字是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