2013-01-17 45 views
0

如何表達字符串匹配以下內容的正則表達式。正則表達式 - 文本,文本,數字

text, text, number 

注:

文本=可以是單詞或空間的任何量。

number =大多數是4位數字。

逗號(,)也必須匹配。

作爲一個例子,下面的字符串是有效的:

'Arnold Zend, Red House, 2551' 
+4

...在哪種語言,你的編程?並非所有正則表達式都是相同的。 – Johnsyweb

+0

我在C#編程# – user1384603

+0

嘗試尋找一個起點:http://msdn.microsoft.com/en-us/library/az24scfc.aspx – Tebc

回答

2

爲正則表達式模式將是(括號中,捕獲組,如果你要訪問的個別項目:

([a-zA-Z\s]{3,}), ([a-zA-Z\s]*{3,}), ([0-9]{4}) 

它匹配2個名字和一個由逗號分隔的4位數字,至少3個字符長度的名稱,如果你願意,可以改變名字字符的最小值,這是如何檢查一個字符串是否與此匹配圖案:

// 'Regex' is in the System.Text.RegularExpressions namespace. 

Regex MyPattern = new Regex(@"([a-zA-Z\s]*), ([a-zA-Z\s]*), ([0-9]{4})"); 

if (MyPattern.IsMatch("Arnold Zend, Red House, 2551")) { 
    Console.WriteLine("String matched."); 
} 

我用RegexTester測試了表達式,它工作正常。

+0

當這些單詞不存在時,這個正則表達式不會返回true嗎?例如=「,,1234」 –

+0

@PaulMcLean其實是的,我忘了在那裏設置一個限制,這裏是避免這個問題的正則表達式:'([a-zA-Z \ s] {3,}),([a -zA-Z \ s] * {3,}),([0-9] {4})'這個正則表達式確保單詞長度至少爲3個字符,如果您願意,可以更改數字。 –

0

嘗試此 -

[\w ]+, [\w ]+, \d{4} 
+0

'\ w'允許有下劃線,並且不允許有空格。 –

0

([A-ZA-Z \ S] +),([A-ZA-Z \ S] +),([0-9] {4})

+0

'[a-zA-Z] +'不包含名稱中的空格。 –

2

我會使用正則表達式:

(?<Field1>[\w\s]+)\s*,\s*(?<Field2>[\w\s]+)\s*,\s*(?<Number>\d{4})

\w =所有字母(大寫和小寫字母)和下劃線。 +表示一個或多個

\s =空白字符。 *表示零或更多

\d = 0到9的數字。{4}表示它必須準確地爲四個

(?<Name>) =要匹配的捕獲組名稱和模式。

您可以在System.Text.RegularExpressions命名空間與Regex對象用這個,像這樣:

static readonly Regex lineRegex = new Regex(@"(?<Field1>[\w\s]+)\s*,\s*(?<Field2>[\w\s]+)\s*,\s*(?<Number>\d{4})"); 

    // You should define your own class which has these fields and out 
    // that as a single object instead of these three separate fields. 

    public static bool TryParse(string line, out string field1, 
              out string field2, 
              out int number) 
    { 
    field1 = null; 
    field2 = null; 
    number = 0; 

    var match = lineRegex.Match(line); 

    // Does not match the pattern, cannot parse. 
    if (!match.Success) return false; 

    field1 = match.Groups["Field1"].Value; 
    field2 = match.Groups["Field2"].Value; 

    // Try to parse the integer value. 
    if (!int.TryParse(match.Groups["Number"].Value, out number)) 
     return false; 

    return true; 
    } 
+0

我很確定這不會像OP想要的那樣工作。您是否使用示例輸入進行了測試? – nhahtdh

+0

+1我喜歡你如何放置命名捕獲組。但是'(? \ w +)\ s *'部分沒有考慮名稱中的空格,只是在名稱的末尾。所以它不會匹配'Arneold Zend,Red House,2551'。而且'\ w'允許有下劃線,我不認爲OP要這樣。 –

+0

關於單詞之間沒有空格的好處,我不得不爲此編輯。我用樣本輸入測試了它,但錯誤地解決了我的問題。至於下劃線,這當然取決於OP,但這對我來說是合乎邏輯的。如果你有一個字符串,例如'Something_Else',我會假設你想要捕獲它而丟棄它。 – Erik

0

要兼容Unicode:

^[\pL\s]+,[\pL\s]+,\pN+$