2011-10-13 37 views
0

簡短的問題,但不能使其工作。我有一個字符串:正則表達式提取2個不同字符和字符串之間的字符串

COMPANY NAME - username (Name Surname). 

什麼樣的正則表達式的會給我username(無空格)從-(之間的這樣的例子?

這是ASP.NET C#,如果它有任何區別。提前致謝 !

編輯: 公司名稱是一個可能的空格字符串。用戶名不含空格。字符-(只出現在這2個地方。自從我舉出這樣的例子以來,我認爲這是100%明顯的。

+2

'username'是否可以包含空格或括號? –

+2

公司名稱是否可以包含連字符或括號? –

+2

是否保證該線路將以完全停止狀態結束? –

回答

3
var match = Regex.Match(
    "COMPANY - ltd (NAME) - username (Name Surname)", 
    @"^.* - (.*?) \(.*\)$" 
); 
var username = match.Groups[1].Value; 

如果您的線路有.,則正則表達式的結束是@"^.* - (.*?) \(.*\)\.$"

通過使用.*?(懶惰的量化r)這個正則表達式對於我用來作爲測試的那個奇怪的「東西」很有抵抗力。

Link有測試。傳遞每一行以查看捕獲組。

3
string resultString = null; 
try { 
    resultString = Regex.Match(subjectString, @"-\s+(\S*)\s*\(").Groups[1].Value; 
} catch (ArgumentException ex) { 
    // Syntax error in the regular expression 
} 

輸出:username

+1

您可以刪除'RegexOptions'。當然,這隻適用於'username'不包含空格的情況。這是一個合理的假設,因此+1。 –

+0

@TimPietzcker選項被遺忘在以前的正則表達式中:S。 +1指出它! – FailedDev

+0

這很好,謝謝。通常用戶名不包含空格,我沒有提及有問題的空間,所以假設很好:) – yosh

0

很容易使用grep來測試正則表達式:

kent$ echo "COMPANY NAME - username (Name Surname)."|grep -Po '(?<=-).*(?= \()' 
username 
相關問題