1

のルビ配列を取りましょうsentences。私たちが持っている配列内で

  1. 単語のみを含む文
  2. 電話番号を含む文
  3. 測定単位付きの数値を含む文
    • この場合、次のようになります: 1mL55mL1 mLなど
  4. 1xまたはとして示される量を含む文5 x

gsubor関数のルビ正規表現を構築しようとしてscanいます。上記の配列をクリーンアップして、sentences各文に単語 (1)、測定単位 (3)、および数量 (4) のみが残るようにしますが、クリーン電話番号 (2) などの単語以外のすべての文字と、\t.

私はこれまでのところこれを持っています:

sentences.map do |sentence|
  sentence.gsub!(/(?:(\d+)(?:[xX])|([xX])(?:\d+)[^a-zA-Z ])/, "")
end

残念ながら、それは私が置き換えたいものとは正反対のものを置き換えます。また、測定単位を保持したい場合はまったく考慮されていません。

入力と出力の例:

入力:     Lavender top (6 mL size preferred)
出力:   Lavender top (6 mL size preferred)

入力:   Blood & bone marrow aspirate: 15 mL centrifuge tube with transport media. Available from Cytogenetics, 415-123-4567.
出力: Blood & bone marrow aspirate: 15 mL centrifuge tube with transport media. Available from Cytogenetics, .

入力:   Gold top x1, Lt. Green top x 1, Lavender top x1
出力: Gold top x1, Lt. Green top x 1, Lavender top x1

したがって、事実上、数字やその他の英字以外の文字を置き換えますが、数字が測定値や量を表していない場合に限ります

rubular で約 3 時間プレイしましたが、役に立ちませんでした。先読みを完全に誤解しているか、重要な落とし穴の瞬間を 1 つ見逃している可能性があると思います。

正規表現の専門家が参加するのを楽しみにしています!

4

2 に答える 2

0

これはサンプル データで機能しますが、処理されない他のケースがある可能性があります。

(?<!x\s?)\b[-.\d]+\b(?!\s*?ml)

正規表現415-123-4567は、サンプル データの とのみ一致します。

于 2013-11-13T11:23:58.363 に答える