0

「option1;option2;option3」のような文字列がありますが、「;」は セパレーターは何でもかまいません。ユーザーが入力する 1 文字以上の任意の文字列。

入力文字列以外の情報なしでセパレーターを決定するシンプルでクリーンな方法を探しています。

セパレーターが 2 つの要素の間にのみ存在することは保証できますが、入力文字列にオプションが 1 つしかない可能性を考慮してください。また、セパレーターが英数字以外のもののみであり、スペースと $、#、% などを含めることができることも保証できます。

これの正規表現を作成できませんでしたが、正規表現を特に探しているわけではありませんが、おそらく誰かが作成できるでしょう。

4

2 に答える 2

1

これは、文字 [A-Za-z0-9_] のみがフィールドに表示されることが確実にわかっている場合にのみ機能します。 ^(\w+)\W(\w+)\W(\w+)$

これはおそらくそうではないので、私の解決策は次のとおりです。

  1. 考えられるすべての区切り記号のリストを作成します。
  2. これらの区切り記号のそれぞれについて、(ループで動的に構築された) 正規表現を実行します。^([^X]+)X([^X]+)X([^X]+)$ここXで、 は区切り文字です。
  3. 一致の数が予想される列数と等しいかどうかを確認します (または、列数がわからない場合は 4. に進みます)。
  4. 最初の行の一致は盲目的な運である可能性があるため、すべての行に対して実行して、一致の数が変化するかどうかを確認します。
  5. どこでも一致する場合は、区切り記号と列数があります。一致しない場合は、すべての行の次のセパレーターのチェックを開始します。

このソリューションの欠点は、最悪の場合、テキストのすべての行とすべての区切り記号に対して正規表現を実行することです。考えられる最適化は次のとおりです。

  1. 最初に最も一般的なセパレーターからチェックを開始します
  2. すべてのセパレーターのすべての行に対して正規表現を実行する代わりに、テキスト全体のセパレーター文字の数を数えるだけです。行数が区切り文字の数を割り切れる場合、区切り文字が有効である可能性が高くなります。
于 2013-10-24T13:13:31.577 に答える