正規表現は文字列を有効な数値に変換します。10進数ではなく、符号はオプションです

StackOverflow https://stackoverflow.com/questions/1611038

質問

10進数以降のすべてを削除し、最初の文字がハイフンを除くすべての非数値を削除します。これまでのところ、 / [^ 0-9 ^-] | [^ \。] + $ / があります。 ^-でダッシュの削除をブロックする方法に注意してください。これは、どういうわけか最初の文字ではないダッシュ(記号ではない)のみを削除するためです。助けがありますか?ありがとう。

削除したいだけです

  • 0-9以外の任意の文字。ダッシュ(負符号)の場合は最初の文字を除く
  • 小数点以降および小数点を含むすべて

例: 10js-_67.09090FD => 1067
-10a.h96 => -10

編集:気にしないで、私はこれに間違った方法で近づき、属していないキャラクターを一致させようとしましたが、これに正規表現を使用するべきではないことに気付きました。あなたの答えをありがとう、しかし、私は正規表現について少し学びました、そしておそらく同様の問題を持つ他の誰かがこれを見つけるでしょう。

役に立ちましたか?

解決

これを試してください:

Regex numbers = new Regex(@"^(-?\d*)[^0-9]*(\d*)\.", 
    RegexOptions.ECMAScript | RegexOptions.Multiline);
foreach (Match number in numbers.Matches("10js-_67.09090FD"))
{
    Console.WriteLine(
        Int32.Parse(
            number.Groups[1].Value + 
            number.Groups[2].Value));
}

またはこれ:

Console.WriteLine(
    Int32.Parse(
        Regex.Replace(
            "10js-_67.09090FD", 
            @"^(-?\d*)[^0-9]*(\d*)\.([\s\S]*?)
var re = /^(-?\d*)[^0-9]*(\d*)\.([\s\S]*?)$/
alert(parseInt("10js-_67.09090FD".replace(re, "$1$2"),10));
quot;, "$1$2", RegexOptions.ECMAScript | RegexOptions.Multiline)));

またはこれ:

<*>

他のヒント

/ ^(-?[0-9] +)[^ 0-9 \。] *([0-9] *)。* $ / \ 1 \ 2 / (使用している言語を教えてくれないので、sedを使用してください。)

/^(-?[0-9]+)[^0-9\.]*([0-9]*).*$/
// '^'          ==>l From the Start
// '(..)'       ==>l Group 1
//     '-?'     ==>l An optiona '-'
//     '[0-9]+' ==>l Some numbers
// '[^0-9\.]*'  ==>l Anything but numbers and dot
// '(..)'       ==>l Group 2 (So this is the number after the dot)
//     '[0-9]*' ==>l Some numbers
// '.*

グループ1とグループ2(/ \ 1 \ 2 /)のみを印刷します。

テスト:

$:~/Desktop$ echo "10js-_67.09090FD" | sed -r "s/^(-?[0-9]+)[^0-9\.]*([0-9]*).*$/\1\2/"
1067
$:~/Desktop$ echo "-10a.h96" | sed -r "s/^(-?[0-9]+)[^0-9\.]*([0-9]*).*$/\1\2/"
-10

これが役立つことを願って

==>l The rest

グループ1とグループ2(/ \ 1 \ 2 /)のみを印刷します。

テスト:

<*>

これが役立つことを願って

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top