當我試圖找出正則表達式時,我總是頭痛。正則表達式匹配字符串中的電子郵件
我有以下的字符串例子:
3; #[email protected]_LThumb.jpg
2; #[email protected]_LThumb.jpg
我需要從字符串中獲得[email protected]
作品。字符串的結尾將始終爲_LThumb.xxx
,並且前綴應爲始終爲xxx_membership_
。
如果有人能想出一些C#正則表達式來幫助我,我將非常感激
當我試圖找出正則表達式時,我總是頭痛。正則表達式匹配字符串中的電子郵件
我有以下的字符串例子:
3; #[email protected]_LThumb.jpg
2; #[email protected]_LThumb.jpg
我需要從字符串中獲得[email protected]
作品。字符串的結尾將始終爲_LThumb.xxx
,並且前綴應爲始終爲xxx_membership_
。
如果有人能想出一些C#正則表達式來幫助我,我將非常感激
\w+?_membership_(\S*?)_LThumb.jpg
\w # Capture a word character
+ # One or more times
? # Lazily (smallest match possible)
_membership_ # Literal string
( # Start capturing group
\S # Any character that isn't whitespace
* # Zero or more times
? # Lazily (smallest match possible)
) # End capturing group
_LThumb.jpg # Literal string
這包括「應該有」的membership
前綴在前面確保我們只從我們的字符串中拉出我們需要的東西。
電子郵件將在比賽的第1組。
謝謝:)你能分解正則表達式,所以我可以理解它的升技? – kalabo
當然,我會編輯這個問題。 –
''\ w \。@] *'可能需要調整。我會建議這樣的:'\ S *?'這樣做有兩件事:一,它將允許所有有效的電子郵件地址字符匹配,二,它不是一個貪婪的匹配,所以我們得到更好的回溯行爲( '\ w'匹配下劃線的某些口味)。 –
正則表達式應該在這種情況下是罰款:使用"_membership_"
和"_LThumb.jpg"
爲你的錨,這樣
@"_membership_(.*?)_LThumb.jpg"
,並得到該得到的錨之間一切的第一個捕獲組。
var email = Regex.Match(
"2;#[email protected]_LThumb.jpg"
, @"_membership_(.*?)_LThumb.jpg"
).Groups[1].ToString();
這將打印
[email protected]
上述兩項工作......爲什麼看起來比另一個更復雜?是因爲任何原因更好的「複雜」嗎? – kalabo
@ user257503「更復雜」版本更具限制性:它確保電子郵件由字母,數字,點和'@'符號組成。 – dasblinkenlight
@ user257503不一定。 dasblinkenlight使用'.',它將匹配任何字符,因爲我只包括字母,句號和@s。他也不打擾'_membership'上的前綴,這幾乎毫無用處,但如果您有很多字符串具有相似但不相同的模式,則可幫助我們縮小結果範圍。 –
爲什麼要使用正則表達式?子串應該解決。 – 2012-06-26 20:50:44
你想處理某人有電子郵件地址[email protected]的情況嗎? – Alan
請參閱「[堆棧溢出不允許標題中的標記](http://meta.stackexchange.com/a/130208)」。 –