2

私は正規表現 (正規表現) にかなり慣れていないので、文字列を作成するのに少し助けが必要です。私はそれをほとんど理解していますが、一致させる必要のあるテキストに変数があり、その後にオプションのフレーズが続くと困惑しました。

テキストが「turn $1 [the] lights」のようにフォーマットされているとします。ここで、「$1」は必要な変数ですが、「the」は含めることも除外することもできます。次の宣伝文句「turn (.+) (?:the)?\s*lights」を試してみました。これは、「ライトをオンにする」で機能します。

>>> re.match("turn (.+) (?:the)?\s*lights", "turn on lights").groups()
("on",)

しかし、「the」を含めて「turn on the lights」と一致させようとすると、「on the」が変数として取得されます。

>>> re.match("turn (.+) (?:the)?\s*lights", "turn on the lights").groups()
("on the",)

これは正規表現ライブラリで達成できるものですか? わかりにくい質問で申し訳ありませんがよろしくお願いします!

4

2 に答える 2

1

私が質問を正しく理解していれば、以下を含むがこれらに限定されないフレーズに一致する正規表現を作成しようとしています:

  • 電気を付ける
  • 消灯する
  • ライトをオンにする
  • 明かりを消す

これを行う正規表現は、次のように記述できます。

turn (.+?) (the )?lights

部分別に分類:

  • turn:簡単です。
  • (.+?): 任意の文字を 1 つ以上キャプチャしますが、?は貪欲にならないことを示します。ここで貪欲について読むことができます
  • (the )?を丸かっこで囲んで?単語全体に適用し、全体をtheオプションにします。これによりキャプチャ グループも作成されますが、この事実は無視しても問題ありません。
  • lights:簡単です。
于 2016-04-15T20:49:46.387 に答える