0

以下の文字列は .csv ファイルからのものです。コンマ小数点をポイント小数点に置き換える必要があります。つまり、「92,3245」->「92.3245」です。他のすべては変更されていない必要があります。

str = 'Data,2016-03-11,12:25:55;660,"100","0","92,3245","145","0","0"'

私は試した

pat = ',*(?=\d)';
str = regexprep(str,pat,'.');

しかしその後

>> str =
   Data.2016-03-11.12:25:55;660,"100","0","92.3245","145","0","0"

私はそれから試しました

pat = ',*(?=\d*")';
str = regexprep(s,pat,'.');

しかしその後

>> str =
   Data,2016-03-11,12:25:55;660."100"."0"."92.3245"."145"."0"."0"

私は、',*(?=\d*")'コンマの後に任意の数の数字が続き、その後に引用符が続くものと一致するということでしたが、そうではないようです。

すべてのヘルプは大歓迎です!

明確にするために:望ましい結果は

str = 'Data,2016-03-11,12:25:55;660,"100","0","92.3245","145","0","0"'
4

1 に答える 1

3

あなたは正しい軌道に乗っています。*注意を払う必要があると私が思う最も重要なことは、との違い+です。ドキュメントから、は0 回以上expr*連続して一致し、ここで は1回以上連続して一致します。expr expr+expr

したがって、 MATLAB の正規表現エンジンに、一致する必要がないため、末尾に数字がある',*(?=\d)'すべてのものを一致させたいと伝えています。エンジンは少なくともこれを行わないほどスマートです。そうしないと、次のような結果になります。str,

Data..2.0.1.6-.0.3-.1.1..1.2:.2.5:.5.5;.6.6.0,".1.0.0",".0",".9.2..3.2.4.5",".1.4.5",".0",".0"

量指定子を入れ替えると、次のようになります。

str = 'Data,2016-03-11,12:25:55;660,"100","0","92,3245","145","0","0"';

expression = ',+(?=\d)';
replacement = '.';
newstr = regexprep(str, expression, replacement)

どちらが返されますか:

newstr =

Data.2016-03-11.12:25:55;660,"100","0","92.3245","145","0","0"

ここで、パターンが十分に具体的ではないことに正しく気づき、いくつかの数字引用符が続くコンマを見つけたいと言うようにパターンを改良しました。しかし、繰り返しになり*ますが、正規表現エンジンにすべてを検索strして末尾の 1 桁 ( の後に数量詞はあり\dません) と引用符で置き換えるように指示しています。これは、コンマと一致する必要がないためです。

量指定子を再度入れ替えると、次のようになります。

str = 'Data,2016-03-11,12:25:55;660,"100","0","92,3245","145","0","0"';

expression = ',+(?=\d+")';
replacement = '.';
newstr = regexprep(str, expression, replacement)

どちらが返されますか:

newstr =

Data,2016-03-11,12:25:55;660,"100","0","92.3245","145","0","0"

わーい!

この正規表現は、桁区切り記号と小数点区切り記号が表示される大きな数字を修正しないことに注意してください。

于 2016-05-03T13:25:20.233 に答える