0

文字列に、「.5」、「+.5」、「-.5」など、先行ゼロのない有効な数値がある場合、正規表現を使用してそのようなパターンに一致させ、先行ゼロを追加する方法は?

言う、

s=".5x-.3/+.74x1.2"

なりたい

0.5x-0.3/+0.74x1.2

そして使う

(?!\d)([+-]?)(?!\d)(\.\d+)

パターン$10$2としても置換としても機能しますが、正しいものが提供されないのはなぜでしょうか?

PS: Excel で VBScript RegExp エンジンを使用しています

4

2 に答える 2

1
\B\.

ドットの前に数字(または文字)がない場合にのみドットに一致します。これは、要件に合わせて機能するはずです。それを次のように置き換えます0.

正規表現が機能しないのはなぜですか?まあ、それは言う

(?!\d)  # Make sure the next letter isn't a digit
([+-]?) # Try to match a sign (which never is a digit, so why the lookahead?)
(?!\d)  # Make sure the next letter isn't a digit (again)
(\.\d+) # Match a dot and digits (the dot also isn't a digit, so again
        # the lookahead is not necessary)

したがって、最初の先読みを完全に削除することができ、2番目の先読みは、実行したいことを実行するために後読みである必要があります(つまり、ドットの前の文字数字 ではないことを表明します)が、ECMAScriptは認識しません後読みなので、単語境界アンカーを使用する必要があります。

于 2013-03-01T09:48:29.453 に答える
1

正規表現フレーバーが否定的な後読みをサポートしていると仮定して、 に(?<!\d)\.(?=\d)置き換えます。0.

(?<!\d)数字が前に付いていない(数字ではない文字\D前にあり、文字列が で始まる場合に一致しない とは異なります.5)、非消費 (負の後読み)。

\.消費するドット(当然)です。

(?=\d)は、ドットの後には消費しない (正の先読み)数字が続く必要があることを意味します。

消費される文字はドットだけなので、 に置き換えるだけ0.です。


編集(\D|^)\.(?=\d): VBScript は後読みをサポートしていないため、 withのもう少し複雑な置換を使用できます$10.(VBScript フレーバーが 10 番目のグループを取得しようとしないと仮定すると、JavaScript はそうではないようです)。この(\D|^)\.部分は、文字列の先頭または数字以外の文字の前にあるドットに一致します。この前の文字は消費されるため、元に戻す必要があるため、$1.

于 2013-03-01T10:01:06.583 に答える