2012-09-14 64 views
5

更換號碼我試圖做到的,是從(match * int)計算的新值在字符串中更換號碼。查找和字符串與正則表達式

因此字符串輸入的樣子:

500g Flour 
14g Salt 
7g Dry yeast 
45ml Olive oil 
309ml Water 

而結果應該是這樣的:

1000g Flour 
28g Salt 
14g Dry yeast 
90ml Olive oil 
618 ml Water 

row["ingredients"]DataRow

這是我在我:

System.Text.RegularExpressions. 
     Regex.Replace(row["ingredients"].ToString(), 
         @"[^/d]", Delegate(Match match) { return match * 2; }, 
         RegexOptions.Multiline); 

任何溶液不勝感激。

+3

可能是一個愚蠢的問題,但有一個理由爲什麼你不加鹽和其他成分? – dash

+0

'500克麪粉14克應改爲'1000克麪粉28克鹽'嗎?如果沒有,我認爲所有的答案都必須考慮到這一點。 – hamed

+0

錯字,應該是28克鹽 – James

回答

4

的第一個問題是,你的正則表達式只匹配不是數字字符。

更正:它使用正斜槓,而不是一個反斜槓,因此它匹配任何不是斜線或廣告

您正則表達式更改爲@"\b(\d+)"

這裏有dotnetfiddle.net

工作示例
using System; 
using System.Text.RegularExpressions; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var string1 = "500g Flour 14g Salt 7g Dry yeast 45ml Olive oil 309ml Water"; 

      var result = Regex.Replace(string1, @"\b(\d+)", Doubler, RegexOptions.Multiline); 

      Console.WriteLine(result); 

      Console.ReadKey(); 
     } 

     private static string Doubler(Match match) 
     { 
      return (Convert.ToInt32(match.Value)*2).ToString(); 
     } 
    } 
} 
+0

爲什麼downvote? – CaffGeek

+0

不是由我,但你的正則表達式匹配字符串'/ w /',後面跟着一個或多個'd's。 –

+0

@TimPietzcker,錯字,那些應該是反斜槓,固定 – CaffGeek

1

[^/d]表示「除斜槓外的任何字符或字母d」。

要匹配數量,使用\d+

0

持不同類型的數據的數據行成是不好的做法。 在您的樣品: 「500克麪粉」 - 在這裏你有ingredientValue,measureType,ingredientName。 我會建議創建一個小數據類,它將表示這一行,並且所有類型的數據都將是這個類的屬性。
好處是忘卻:
- 無需要用正則表達式魔術
更換 - 易於擴展和修改

所有你需要用正則表達式是什麼創造提供的數據行的正確語法分析器。但肯定更容易,然後與替換技巧。

0
void Main() 
{ 
    string ingredients = 
@"500g Flour 
0.5g Salt 
7g Dry yeast 
45ml Olive oil 
309ml Water"; 

    string pattern = @"(?:[0-9]+\.?[0-9]*|\.[0-9]+)"; 

    int multiple = 2; 

    Regex.Replace(ingredients, pattern, m => (Convert.ToDecimal(m.Value)*multiple).ToString()).Dump(); 
} 

我在LINQPad中這樣做了,所以不用擔心Dump()只是輸出結果。爲了證明它與非整數一起工作,我將salt改爲0.5。這種模式是我能想出匹配整數和小數(有或沒有任何數小數點前)最好的所以它會匹配17,3.141592,或0.5

相關問題