2016-11-11 3 views
1

これは私が達成しようとしているものです。特定のデータセットを与えられた私は、私が持っている一致する正規表現を含む行全体を取得しようとしています。基本的に正規表現が一致するパターンが存在する場合はそれ以外

は、この

AFAM 002A AFAM & DEV AM HIS/GV 03 46493 3 LEC D2 70 P 20/15 W 1800-2045 08/24/16-12/12/16 WSQ 207 K WHITE 
AFAM 102 AFRO-AMER MUSIC 01 47200 3 LEC P 5/30 W 1800-2045 08/24/16-12/12/16 MUS 250 V GROCE-ROBERTS 
AFAM 125 THE BLACK FAMILY 01 47198 3 LEC P 16/40 M 1800-2045 08/24/16-12/12/16 CCB 101 S MILLNER 
AFAM 152 THE BLACK WOMAN 01 47199 3 LEC P 8/40 T 1800-2045 08/24/16-12/12/16 CL 111 R WILSON 
AFAM 159 ECON ISSUES BLKCM 01 47197 3 LEC P 11/40 MW 1330-1445 08/24/16-12/12/16 CL 234 R WILSON 
AFAM 180 INDIVIDUAL STUDIES 01 46982 3 SUP P 0/10 TBA TBA 08/24/16-12/12/16 

として、データ・セット、私は..

  1. コースIDなどに次の基本的にグループを作成した正規表現を与えられました。 AFAM 002A
  2. コース名eg。 AFRO-AMER MUSIC
  3. 開始日
  4. 終了日
  5. 教授名(これは私がオプションになりたい値である)

私は今が午前問題はそのためですオプションの値ではなく、私は何であるかそれが存在するかどうかをチェックし、そうでなければ空にします。誰かが私にこれを行う正しい方法を示すことができたら、私はそれを大いに評価するでしょう。

基本的にそれが存在する場合には含まれる必要([A-Z][\s][A-Z]+[-]*[A-Z]+)?私の正規表現のこの部分は、私はそれが?オペレータが動作するようになっているかということを理解し、しかし、私はここで私は

だこの質問のための右のキーワードを見つけるように見えるカント
([A-Z]+[\s][0-9]+[A-Z]*)(.+)[\s][0-9]+[\s][0-9]+.+(\d\d\/\d\d\/\d\d)-(\d\d\/\d\d\/\d\d)[\s]([A-Z][\s][A-Z]+[-]*[A-Z]+)? 

最後の2行については、このデータセットの期待される結果は、あなたの正規表現がと一致していません

{ [ (AFAM 159), (ECON ISSUES BLKCM), (08/24/16), (12/12/16), (R WILSON)], 
[(AFAM 180), (INDIVIDUAL STUDIES), (08/24/16), (12/12/16),()] 
} 
+0

何を空にしたいですか?期待される結果は何ですか? –

+0

私はお詫び申し上げます。編集で期待される結果を追加しました –

+0

あなたの正規表現は、最後の1行に 'CL 234'とマッチしません。 \ s \ d + \ s \ d +。\(\ d \ d \/\ d \ d \/\ d \ d) ([AZ] \ s [AZ] + - * [AZ] +))?]](https: //regex101.com/r/LjKmw9/1) –

答えて

1

する必要があります最後の1行にが表示されます。あなたはそれを消費する必要があります。ただし、.*?を追加するだけでは機能しません。オプションのパターンを義務化(?を削除)し、.*?([A-Z]\s[A-Z]+-*[A-Z]+)をオプションの非キャプチャグループ(?:....)で囲む必要があります。

([A-Z]+\s\d+[A-Z]*)(.+?)\s\d+\s\d+.+?(\d\d\/\d\d\/\d\d)-(\d\d\/\d\d\/\d\d)\s(?:.*?([A-Z]\s[A-Z]+-*[A-Z]+))? 

regex demoを参照してください。

+0

こんにちは、私はサイトの文書を読んでいます。基本的に '(?:....)'はパターンを探す貪欲な方法でしたその正規表現に最初にマッチします。それ以外の場合は空になりますか?私はそのことを訂正していますか? –

+0

量指定子は貪欲であり、グループはキャプチャされているかどうか、名前が付けられているか番号が付けられています。 '(?:PATTERN1PATTERN2 ... PATTERNn)?'は、パターンのシーケンスを任意にしますが、 '?'はgreedyなので、1回または0回実行されます。したがって、そのグループ内のパターンのシーケンスが試され、グループ内でパターンが重大なので存在すればグループ全体が失敗しますが、オプションであるためパターン全体が一致を返します。 –

関連する問題