-2

私は中学校で Canvas を使用しており、「穴埋め」と呼ばれる質問タイプを含むクイズを作成しています。このタイプの問題の採点オプションは、生徒が入力した内容を正規表現と比較することです。クイズの設定では、単一の正規表現しか入力できず、入力が一致した場合、質問は正解としてカウントされます。これは、単一または少数の単語の回答に対して簡単に実行できます。しかし、「ピリオドで終わる環境刺激の 3 つの異なる例を挙げてください」のような質問をしたいと思います。したがって、正しい入力文字列は次のようになります。

雨。明るい日差し。犬の鳴き声。

しかし、間違った入力文字列は次のようになります。

水。水。自転車。

個々のフレーズを照合し、 を使用してそれらを分割できます([\w\s']*[^\.]?)。これにより、正規表現テスターで 3 つの一致が得られます。しかし、私はさらに先に進む必要があります。

キーワードの各フレーズをチェックし、そのキーワードが以前に使用されたかどうかをチェックする必要があります。基本的に、単一の正規表現パターンを使用して、繰り返しなしで代替グループを照合する必要があります。これはできますか?

4

1 に答える 1

0

私の理解が正しければ、繰り返しのない代替グループが必要です。これは少し複雑で、いくつかの制限がありますが、実行できます。

必要がある

  • 回答の前後にランダムなフィラー ワード、句読点などを許可します。基本的に、答えにならないものは何でも(?:(?!(?:\1|\2|\3)).)*
  • \b重複を許さない方法で代替グループ内の回答を (必要に応じて単語境界で) 定義します。

つまり、正規表現フラグ gxi を使用する (またはそれらの (一部を) インライン化する) このようなパターン(?x)(?i)

^                                    # begin of string
(?:(?!(?:\1|\2|\3)).)*?              # ungreedy anything that is not captured by group 1,2,or 3
   (                                 # 1th capturing group
    (?:\brain\b|\bsunlight\b|\bbark) # Alternation group (answers) \b word-boundaries as needed
   )
(?:(?!(?:\1|\2|\3)).)*?              # ungreedy anything that is not captured by group 1,2,or 3
   (                                 # 3th capturing group
    (?:(?!(?:\1|\3))(?:\brain\b|\bsunlight\b|\bbark)) # Answers not captured in group 1 or 3
   )
(?:(?!(?:\1|\2|\3)).)*?              # ungreedy anything that is not captured by group 1,2,or 3
   (                                 # 4th capturing group
    (?:(?!(?:\2|\3))(?:\brain\b|\bsunlight\b|\bbark)) # Answers not captured by group 2 or 3
   )
(?:(?!(?:\1|\2|\3)).)*               # anything that is not captured by group 1,2,or 3
$                                    # end of string

パターンは単純化できますが、パターンを読みやすくするように努めました (ただし、次のような手法(?(DEFINE).(?"answers"))を使用すると、正規表現をより保守しやすくすることができます)。

Ruby Rublar デモ( g|global およびm|multiline フラグは、tubular のデフォルトです)、
PCRE デモ( gmxi-flagsを
使用)

これは基本的な考え方を示しており、開始する必要があります。とはいえ、正規表現は言語ツールでも AI でもありません。パターンは文脈に依存せず、回答が実際に意味をなすかどうかを検証しません。たとえば、rain|sunlight|bark可能な回答として定義すると、これは有効です。

ゾウの鳴き声、緑の日光、紫の雨、その他ナンセンス

于 2020-10-27T21:12:33.890 に答える