0

小数点以降のすべてを削除し、最初の文字の場合はハイフンを除く数値以外のすべてを削除します。これまでのところ、私はこれを持っています: /[^0-9^-]|[^\.]+$/. でダッシュが削除されないようにブロックする方法に注意してください^-。なぜなら、最初の文字ではない (記号ではない) ダッシュだけを削除したいからです。何か助けはありますか?ありがとう。

削除してほしいだけ

  • 最初の文字がダッシュ (マイナス記号) の場合を除き、0 から 9 以外の任意の文字
  • 小数点以下のすべて

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

編集:気にしないでください、私はこれに間違った方法でアプローチし、属していない文字を一致させようとしましたが、これに正規表現を使用すべきではないことに気付きました. 回答ありがとうございます。私は正規表現について少し学びました。同様の問題を抱えている他の誰かがこれを見つけるかもしれません。

4

2 に答える 2

1

それは/^(-?[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
// '.*$'        ==>l The rest

次に、グループ 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

お役に立てれば

于 2009-10-23T02:18:02.847 に答える