2012-01-15 9 views
0

を使用して単位を末尾:ストリップはのは、オリジナルのテキストは、このようなものであるとしましょう正規表現

12345 {unit}

その後{unit}一部を除去し、数字だけを維持するための正規表現パターンは何ですか? unitの長さはランダムであることに注意してください。ありがとう。

編集: よく私は\ d +を使うことを考えていましたが、数字部分に何らかの区切り文字が含まれていると失敗すると思います。 1000セパレータ。だから数字がこのように見える場合、12,345パターンは\ dおそらく動作しません。

+1

シンプルな\ d +仕事ですか? – Douglas

答えて

1
string extractValue(string input) { 
    var result=Regex.Match(input,@"(\d+(?:,\d{3})*)\s"; 
    return (result.Success) ? result.Groups[0].Value : null; 
} 

この関数は、一致した値の文字列が一致しない場合はnullを返します。

その後、マッチラインを整数に対照的な結果が

var result=Regex.Match(input,@"(\d+(?:,\d{3})*(?:\.\d+))\s"; 

を読んでいました(小数点ことができればまたその後、int型

int? extractIntValue(string input) { 
    var result=Regex.Match(input,@"(\d+(?:,\d{3})*)\s"; 
    if (result.Success) return int.Parse(result.Groups[0].Value,System.Globalization.NumberStyles.AllowThousands|System.Globalization.NumberStyles.Integer); 
    return null; 
} 

を取得するためにint.parseて結果を解析することができ小数点以下の値を使用していた場合は、適切なdecimal.parseメソッドを使用します。

+0

多くのありがとう、これは私のために働く。 – woodykiddy

0
Regex.Match(input, @"([0-9]+) ") 

または

Regex.Match(input, @"(\d+) ") 

は "単位" の部分は、から構成され、正確にどのようなだけの数の一部

+0

これにはスペースが含まれます –

+0

OPごとに、数字とユニットパートの間にスペースがあります...スペースは一致しますが、マッチグループの一部にはなりません –

0

と一致しますか?それに数字を入れることはできますか?もしそうでなければ、これはうまくいくかもしれません:

string numberPart = Regex.Match(@"\d+").Value; 
1

あなたはいつもそのフォーマットを持っていれば、私はあなたがRegExpを使う必要はないと思います。あなたはスペース上の文字列を分割することができます。あなたの番号としてスペースの前にあったものを取ります。

string original = "12345 {unit}"; 
string[] parts = original.Split(' '); 
string yourNumber = parts[0]; 
+0

それは事実だけですそのケースを扱う。また、通常の文章のように規則的な文字列を受け取ることもよくあります。 – woodykiddy

+0

おそらく 'input.Split(new [] {''}、2);代わりに2つの文字列に分割を制限するために –

+0

@woodykiddy私はええ、その場合は私の答えはあなたに幸運を与えるだろうと思う。 –

0

また、単純な文字列操作で十分です。あなたはこのパターンを使用することができます{unit}部分がありますときにのみ、番号をキャプチャしたい場合

string text = "12345 {unit}"; 
string result = new string (text.Trim().TakeWhile(c => char.IsDigit(c)).ToArray()); 
0

:開始数字列を取る

(\d+)(?:\s+\{\w+\}) 

?:は、それがスペースをキャプチャしていないことを意味しますとユニット。

0

正規表現[0-9][,0-9]+[0-9]は、 seperatorとしてのカンマ。

1
string[] sa = 
    { "12345 {unit}", "12345{unit}", "-123.45{unit}","-1,023.45{unit}", 
    "12345 cm", "99%", "99.1 %", "0.1234{unit}","-0.1234{unit}", 
    "12345", "123.45", "12,345.67 {unit}" 
    }; 

foreach (string s in sa) { 
    Console.WriteLine("Numeric=[" + Regex.Replace(s, @"[^\d]+$", "") + "], Unit=[" + Regex.Match(s, @"[^\d]+$") + "]"); 
} 

私のロジックは、値の後ろにあるnoneの数字だけを検出することです。フロントとミドルのマイナス記号( - )、カンマ、ドットはそのまま残ります。

この汎用ロジックを使用して、値のみまたは単なる値を削除することができます。

Numeric=[12345], Unit=[ {unit}] 
Numeric=[12345], Unit=[{unit}] 
Numeric=[-123.45], Unit=[{unit}] 
Numeric=[-1,023.45], Unit=[{unit}] 
Numeric=[12345], Unit=[ cm] 
Numeric=[99], Unit=[%] 
Numeric=[99.1], Unit=[ %] 
Numeric=[0.1234], Unit=[{unit}] 
Numeric=[-0.1234], Unit=[{unit}] 
Numeric=[12345], Unit=[] 
Numeric=[123.45], Unit=[] 
Numeric=[12,345.67], Unit=[ {unit}] 
関連する問題