2009-04-15 6 views
1

この正規表現は何をしますか?ファイル名を置き換えることがわかります(拡張子ではありません)この正規表現はどのように機能し、5回だけ繰り返すのですか?

Regex r = new Regex("(?<!\\.[0-9a-z]*)[0-9]"); 
    return r.Replace(sz, "#"); 

5回だけ繰り返すにはどうすればいいですか? "1111111111.000"から "11111 #####。000"に変換しますか?

+0

これは何のために使用されていますか?それがどのように使用されているかを知ることは役に立ちます。 – stevehipwell

答えて

2

私は」haventはこれを試みたが、を作品、それをを試してみました:どのように代わりに肯定先読みを使用するための一般的なパターンを変更することについては?そうすれば、それが動作するはずです:

[0-9a-z](?=[0-9a-z]{0,4}\.) 

は基本的に、これは4つのまでの他の英数字とピリオド任意の(英数字)文字を検索します。これは、ピリオドの前の最後の5文字を​​連続してマッチさせることができます。それはひどく非効率的ですが、可変幅の先読みパターンを許可するエンジンでのみ機能します。

+0

.NETで動作します。 –

0

閉じ括弧の後のアスタリスクを "{5}"(引用符なし)に変更してください。これは正規表現環境のフィーチャセットに少し依存しますが、これは一般的な構文です。

+0

それはそれを壊す(extは今###になる)。 –

0

正規表現は、先行しないドット(0〜9)または0〜9またはa〜zのいずれかの数字と一致します。

リプレースラインは、複数の置換を担当します。だからあなたはextra parameter countを持つReplaceメソッドを使いたいと思っています。

ので、コードは次のようになります。

Regex r = new Regex("(?<!\\.[0-9a-z]*)[0-9]"); 
return r.Replace(sz, "#", 5); 
+0

テストされていませんが、これは実際には最初の5桁を置き換えて、 '##### 1111.000'を与えます。これはあなたが望むものではありません。だからKonradの解決策を考えてみましょう。 –

関連する問題