2

ユーザーがセクションを指定できる構成ファイルがあり、それらのセクション内で正規表現を指定できます。この構成ファイルを解析し、正規表現をさまざまなセクションに分割する必要があります。

セクションヘッダーから正規表現を区切る簡単な方法はありますか?私はただの標準を考えていました

[セクション]
regex1
regex2

しかし、[セクション]が有効な正規表現であることに気づきました。したがって、セクションヘッダーをフォーマットして、正規表現ではなくセクションヘッダーとしてのみ理解できるようにする方法があるかどうか疑問に思っています。

4

4 に答える 4

4

無効な正規表現を作成する方法は無制限ですが、最初に頭に浮かぶのは

*section*

*正規表現の先頭に数量詞()を含めることはできません。

(もう1つ*は、対称性に対する私の執着を満足させるためだけにあります。)

于 2010-09-18T21:55:26.520 に答える
1

問題のドメインがわからないので、どのような形式の正規表現を期待しているのかわかりませんが、セクションのフォーマットはそのままにしておく必要があるようです。[で始まり]で終わり、間に角かっこがない正規表現は非常に珍しいものです。一致できるのは1文字のみです。したがって、セクションヘッダーはそのままにしておきます。厳密に言えば、これらは有効な正規表現ですが、おそらく興味深い正規表現ではありません。

また、ConfigParser標準ライブラリから使用して、解析を実行してみませんか?

于 2010-09-18T23:18:11.373 に答える
0

簡単な方法はありますが、すべてフォーマットを変更する必要があります。

  1. Pythonソースの解釈と同様に、インデントを使用します。先頭のスペースには、「abc」ではなく「(?:)abc」などの特別な処理が必要です。
  2. セクション内の各アイテムに名前=値のペアが必要なINI形式を使用します。
  3. ある種のリスト構文を使用します。 ast.literal_evalが役立ちます。

    section1 = [
      "regex 1",
      "2",
      "3",
    ]
    section2 = ["..."]
    

主に、独自の形式を考案したり、既知の形式にできるだけ近づけたりしないでください。3つ目は、たとえばPython構文のサブセットであり、生の文字列リテラルを自然に使用することもできます。

JSONまたはYAMLが役立つ場合があります。

于 2010-09-18T22:02:36.823 に答える
0

他の人が言っているように、さらに別の構成形式を発明しないでください。Python標準ライブラリのConfigParserを使用すると、[section]表記を表示どおりに解析できます。

編集:allow_no_valueオプションを使用すると、キーと値のペアではなく、単一のエントリのみを使用できます。また、デフォルトのdictタイプはOrderedDictであるため、順序が維持されます。

于 2010-09-19T22:58:04.560 に答える