2012-09-22 45 views
6

的使用正則表達式我怎麼能提取所有文本在雙引號,和所有的講出了在這樣的字符串引號:正則表達式:提取所有的講出了報價

01AB "SET 001" IN SET "BACK" 09SS 76 "01 IN" SET 

第一個正規表達式應該提取所有文字像

SET 001 
BACK 
01 IN 

二表達式中的雙引號768,16提取所有換句話說串

01AB 
IN 
SET 
09SS 
76 
SET 

對於第一個案件正常工作("(.*?)")。我如何提取引號中的所有單詞?

+0

檢查此[鏈接](http://stackoverflow.com/questions/9133220/regex-matches-c-sharp-double-quotes)其幾乎一樣的你 – andy

回答

5

試試這個表達式:

(?:^|")([^"]*)(?:$|") 

通過它匹配將排除引號的羣體,因爲他們被封閉在非捕獲括號(?:)。當然,你需要避免在C#代碼中使用雙引號。

如果在引號值的目標串的開始和/或結束時,此表達式將匹配空組,以及(用於初始和尾部引用)。

1

您需要否定第一個表達式中的模式。

(?!模式)

退房this link

2

也許你可以嘗試用空字符串替換詞引號內,如:

Regex r = new Regex("\".*?\"", RegexOptions.CultureInvariant | RegexOptions.Compiled | RegexOptions.Singleline); 
     string p = "01AB \"SET 001\" IN SET \"BACK\" 09SS 76 \"01 IN\" SET"; 

     Console.Write(r.Replace(p, "").Replace(" "," ")); 
4

試試這個正則表達式:

\"[^\"]*\" 

使用Regex.Matches在雙引號的文本,並使用Regex.Split所有其他字:

var strInput = "01AB \"SET 001\" IN SET \"BACK\" 09SS 76 \"01 IN\" SET"; 
var otherWords = Regex.Split(strInput, "\"[^\"]*\""); 
1

如果建議您需要所有塊句子 - 引用而不是 - 那麼通過使用正則表達式可以更簡單地分離源字符串。 拆分

static Regex QuotedTextRegex = new Regex(@"("".*?"")", RegexOptions.IgnoreCase | RegexOptions.Compiled); 

var result = QuotedTextRegex 
       .Split(sourceString) 
       .Select(v => new 
        { 
         value = v, 
         isQuoted = v.Length > 0 && v[0] == '\"' 
        });