2013-09-23 56 views
1

我想創建一個正則表達式和C#的模式,將匹配像一個短語:的正則表達式匹配詞,並創建捕捉組

Photos of Washington DC taken by Jane Doe 

凡捕獲組導致「照片」,「華盛頓」和「 Jane Doe「。其他的可能性是:

Videos of Austin taken by Ruby:視頻,奧斯汀,紅寶石

Photos of Red Bud Dogs taken by Willa Shepherd:照片,紅芽狗,威拉牧羊犬

這甚至可能與正則表達式?

看來我被標記了......我提到我不知道RegEx嗎? 我嘗試過:(Photo of).*?((?:[a-z][a-z]+))(Taken by)((?:[a-z][a-z]+))但是失敗了。

+0

當然是!嘗試查找'.Matches'方法。 – Jerry

+0

是的,這是可能的。我通常在構建更復雜的表達式時使用此網站:http://gskinner.com/RegExr/ – Leon

+0

感謝Leon,儘管我不明白該工具。我試圖粘貼下面Tim的結果,但比賽沒有意義。 –

回答

1

.*匹配任何字符串(除了換行符)。通過添加一個?.*?),您可以告訴正則表達式引擎匹配儘可能少的字符,這可能是正確的方法,因此oftaken by的第一個實例將用作您想要的子的分隔符 - 匹配:

matchResults = Regex.Match(subjectString, "^(.*?) of (.*?) taken by (.*)"); 
// matchResults.Groups[1].Value contains "Photos" etc. 

如果你不希望在你輸入一個以上oftaken by,你可以改變一切.*?.*

+0

...你的答案是居高臨下,但它的工作原理,謝謝。 –

+0

@MatthewMcDermott:抱歉 - 你最初的問題並沒有顯示你的問題在哪裏,它有點像「我不喜歡讀一個基本的[正則表達式教程](http://www.regular-expressions .info/tutorial.html),請爲我寫一些代碼「 - 這導致我的回答比較鈍。你編輯的問題好多了,我會試着相應地改進我的答案。 –

+0

甜,謝謝,我已經在這個好幾天了,RegEx對我來說真是一個謎。即使在應用您的解決方案後,我也不會真正理解它。然後測試它更加困難。 –