1

ここのマスターにとっては、これもまた単純な正規表現のように聞こえるかもしれませんが、今では本当に頭が痛くなります :)

私の問題は、次のデータセットがあり、「名前」を取り除きたいということです。

  1. 名前の質問例: ジョンの質問、ボブの質問
  2. 情報 - 名前例: 情報 - ジュリー、情報 - リチャード、情報 - デビッド
  3. 選択する
  4. 送信

ご覧のとおり、「名前」はいくつかのレコードにのみ含まれていますが、他のレコードには含まれていません。

2 つの正規表現を作成しました。内部で Java を使用して正規表現を解析する 1 つのアプリケーションを使用しています。自分の Java コードを書くことはできません。正規表現を提供することしかできません。:(

  1. (Question*(.*?))
  2. (Information*(.*?))

問題は、「質問」レコードしか取得できず、システムが他の 3 つのレコードを表示しないことです。

問題は、正規表現を としてテストすると(Question*(.*?))、最初の例では「名前」が取り除かれますが、他の3つの例では何も返されないことがわかりました。つまり、リターンは空白です。そのため、システムが「Submit」を解析しているときに、「Question」正規表現の最初の変換で、「Question」という単語が見つからないため、何も返されません。

私が望んでいるのは、「質問」が利用できない場合、システムはそれを削除するのではなく、完全な文字列を返す必要があるということです。したがって、システムが最初の正規表現で「送信」を解析すると、「送信」がそのまま返されるはずです。

正規表現が正しくないかどうかわかりません

PS: 'Select' と 'Submit' は 2 つの例にすぎません。他に少なくとも 20 ~ 25 のレコードがありますが、' Name 'を含むレコードは 2 つしかありません。

4

1 に答える 1

1

このような正規表現を使用できます。「or」であるため、一致は常に MatchGroup 1 になります (「1 行に 1 つの一致」を実行すると仮定します)。

正規表現自体は文字列全体に一致しますが、最初の一致グループにはキーワードのみが含まれます。

(?:.*?(Question)|(Information).*?|(Select|Submit))

正規表現の視覚化

Debuggex デモ

于 2013-09-20T17:11:30.980 に答える