0

正規表現の作成に問題があります。これはテキストのサンプルです:

text 123 12345 abc 12    def 67 i 89 o 0    t 2

数字は、最大長(3)まで空白で埋められることがあります。例えば:

  • 「1」は「1」または「1」にすることができます
  • 「13」は「13」または「13」にすることができます

私の正規表現は現時点では次のとおりです。

\b([\d](\s*)){1,3}\b

この正規表現の結果は次のとおりです。(.=視認性を高めるために空白)

123.
12....
67.
89.
0....
2

しかし、私はこれが必要です:(。=より良い可視性のために空白)

123
12.
67.
89.
0..
2

空白を{1,3}オプションにカウントするように正規表現エンジンに指示するにはどうすればよいですか?

4

4 に答える 4

0

これを試して:

\b(?:\d[\d\s]{0,2})(?:(?<=\s)|\b)

これは、次のような文字列もカバーし、次のようtext 123 1 23 12345 123abc 12 def 67 i 89 o 0 t 2になります。

123
1.
23.
12.
67.
89.
0..
2
于 2011-10-12T10:33:39.447 に答える
0

これはあなたが望むことをしますか?

\b(\d){1,3}\s*\b

これには、選択後の空白(使用可能な場合)も含まれます。

于 2011-10-12T09:48:07.873 に答える
0

私はあなたがこれが欲しいと思います

\b(?:\d[\d\s]{0,2})(?!\d)

ここRegexrでそれを参照してください

一致の終わりが空白である場合、単語の境界がないため、単語の境界は最後には機能しません。(?!\d)そのため、数字の後に続く数字がないことを確認するために、負の先読みを使用します。

しかし、この「123」のような文字列がある場合。「2」と「23」のみに一致し、最初の「2」の後の空白には一致しません。

于 2011-10-12T10:04:21.963 に答える
0

パディングされた数字を別の場所で使用したい場合は、問題を2つに分けてください。(単純な)数値の解析、および(単純な)数値のフォーマット(パディングを含む)。

while ( $text =~ /\b(\d{1,3})\b/g ) {
  printf( "%-3d\n", $1 );
}

または:

@padded_numbers = map { sprintf( "%-3d", $_ ) } ( $text =~ /\b(\d{1,3})\b/g )
于 2011-10-12T11:05:00.603 に答える