2016-04-25 39 views
1

我不知道我做錯了什麼。我有以下內容:C#正則表達式提取後捕獲組號只有

(?:[A-Z]{2}\d{2}\s) 

這是因爲我的字符串總是以兩個高位字母字符和兩個數字開頭。後來我有一個文字混合數據,我只希望我想借此AB12 (1,2,3 words, 4,5,6,7,8,9)並獲得該AB12 (1,2,3,4,5,6,7,8,9)

的數字,我試圖

(?:[A-Z]{2}\d{2}\s)([0-9]+) 

然而,這是行不通的。爲了實現我的目標,我甚至關閉了嗎?

+0

這個問題不清楚。有什麼要求?現在,我只能提出一個非常醜陋的['([AZ] {2} \ d {2} \ s \()(?:\ s *,?\ s *(?:(\ d +)\ b | \ W +))* \)'](http://regexstorm.net/tester?p=(%5BA-Z%5D%7B2%7D%5CD%7B2%7D%5CS%5C()(%3F%3A %5CS *%2C%3F%5CS *(%3F%3A(%5CD%2b)的%5CB%7C%5CW%2B))*%5C)I = AB12 +(1%2C2%2C3 +字%2C + 4 %2C5 2C6%%2C7 2C8%2C9%))。 –

+0

我需要從括號中刪除非數字。 – JeremyA1

回答

1

要刪除這不是一個數字,一個逗號的任何字符,你可以使用[^,\d\s]字符類,並使用(?<=\([^()]*)(?=[^()]*\)) lookarounds斷言括號內的位置:

(?<=\([^()]*)\s*[^,\d]+(?=[^()]*\)) 

regex demo

\s*有助於擺脫非數字值之前的可選(0+)空格。

如果需要精確的與您最初的子模式的情況下,添加:

(?<=^[A-Z]{2}\d{2}\s+\([^()]*)\s*[^,\d]+(?=[^()]*\)) 
    ^^^^^^^^^^^^^^^^^ 

一個C# demo

using System; 
using System.IO; 
using System.Text.RegularExpressions; 

public class Test 
{ 
    public static void Main() 
    { 
     var str = "AB12 (1,2,3 words, 4,5,6,7,8,9)"; 
     var pat = @"(?<=^[A-Z]{2}\d{2}\s+\([^()]*)\s*[^,\d]+(?=[^()]*\))"; 
     var res = Regex.Replace(str, pat, string.Empty); 
     Console.WriteLine(res); 
    } 
} 
+1

謝謝,這正是我所需要的。我從來沒有想過這一點。 – JeremyA1

+0

請注意,您可以進一步將其調整爲僅刪除沒有數字的字塊,並將其保留爲數字:['(?<= \([^()] *)\ s * \ b [^,\ W \ d] + \ b(?= [^()] * \))'](http://regexstorm.net/tester?p=(%3F%3C%3D%5C(%5B%5E()%圖5d *)%5CS *%5CB%5B%5E%2C%5CW%5CD%5D%2B%5CB(%3F%3D%5B%5E()%5D *%5C))I = AB12 +(1%2C2% 2C3 + wor6ds +字%2C + 4%2C5 2C6%%2C7 2C8%2C9%))。 –