2016-03-14 87 views
0

我需要在c#中使用以下正則表達式的幫助。我有一個給定的字符串,我試圖選擇這樣的文本。該字符串來自發票。剩餘的物品將是購買的物品。快速正則表達式的句子

510258-350-JDX 84008043942000 Confirmation of Order is mandatory.994007029908500 ItemMaterial NumberDescription64008029908500Order 840780-16742500 
Long text *** Text*** ==> 84008043942000 Confirmation of Order is mandatory.994007029908500 
ItemMaterial NumberDescription64008029908500Order 840780-16742500 


510258-350JDFT8 84008043942000 Confirmation of Order is mandatory.994007029908500ItemMaterial NumberDescription94008029908500Order 840080-16742500 Long text 232 *** Text*** ==> 84008043942000 Confirmation of Order is mandatory.994007029908500 
ItemMaterial NumberDescription64008029908500Order 840080-16742500 

但我目前的方式是行不通的。我想選擇這些並從字符串中刪除它們。示例中的數字可以更改。

string r2 = raa.Replace(r1, ""); 
string rgconfirm =""; 
string rgorder =""; 

if (r2.Contains("Confirmation")) { 
    rgconfirm = Regex.Match(r2, @"(\d{14} Confirmation)").Groups[0].Value; 
    if (r2.Contains("-")) { 
     rgorder = Regex.Match(r2, @"(Order \d{6}-*+\d{8})").Groups[0].Value; 
    } 
} 

string check1 = rgconfirm + "(.*?)" + rgorder; 
var toreplace = Regex.Match(r2, check1).Groups[0].Value; 

if (toreplace.Length > 2) { 
    r2 = r2.Replace(toreplace, ""); 
} 
+0

請準確指定您要查找的輸出。 –

+1

請注意,組[0]是整個比賽。組[1]是第一個捕獲組。 [源:](https://msdn.microsoft.com/en-us/library/system.text.regularexpressions.match.groups(v = vs.110).aspx)「GroupCollection對象的第一個元素(元素在索引0處)包含一個匹配整個正則表達式模式的字符串,每個後續元素,從索引1向上,表示一個捕獲組「 – Quantic

+1

帶有預期輸出的示例輸入和輸出將會有幫助。 –

回答

0

如果你只是想文本之前的數字「訂單確認是強制性的」,你可以使用下面的正則表達式:

(?<==>\s)\d+?\s*Confirmation of Order is mandatory.+?ItemMaterial NumberDescription\d+?Order\s\d+-?\d+ 

如果你的模式始終保持不變,上述正則表達式表達應該管用。 使用上述正則表達式與RegexOptions.Singleline選項。

+0

我想要的文字是這樣的:84008043942000訂單確認的是mandatory.994007029908500 ItemMaterial NumberDescription64008029908500Order 840780-16742500 –

+0

確定。剛剛更新了我的答案。 –

+0

再次更新。另外,請注意使用'RegexOptions.Singleline'選項。 –