2016-09-02 9 views
1

この正規表現を動作させるためには本当に疲れました。私はsasでperl正規表現を使用しています。誰かが私を助けることができたら、私はそれを大いに感謝します。Perlの正規表現のマッチング:文字列を1つの単語だけにマッチさせる方法、否定的なlookbehindルックアヘッドを使う方法

1 weight 
2 weightchange 
3 weight change 
4 weight percentile 
5 change weight 
6 percentile weight 
7 **** weight pre op 
8 water weight 
9 weight percentile 
10 myocardial infarction 
  1. どのように私は1ではなく2-9に一致するように正規表現を使用します。私は3つの質問、テキストの次の行を検討する(行番号は参照用のみあります)がありますか? (先頭にある単語と一致すると同時に終了する方法です?)

  2. どのように私は1に一致するように正規表現と否定先読み/後読みアサーションを使用して、明示的に2-6を除外するのでしょうか?

  3. 78を除外するにはQ2を解くのに適した正規表現をどのように変更しますか?

ボーナス質問:正規表現を使用してで良いを取得するにはどのくらい時間があなたを取るのですか?

ありがとうございました!

+1

SOは無料のコーディングサービスではありません。あなたが1週間この作業をしていたら、確かにあなたはあなたが望むものに近づいたいくつかの試みがあります。それらを掲示すれば、あなたがそれらを修正するのを手助けすることができます。しかし、私たちはあなたのためにそれをするつもりはありません。 – Barmar

+2

Q1のために '^ weight $'を使うことはできませんか? – Barmar

+0

あなたの(1)は単純なものです( '/^weight \ s * $ /')...そして、その問題は(2)と(3)それらを区別するのに必要なことはありません。あなたが本当にそれを欲しいのであれば、練習として、それはルックアラウンドの基本的な使い方です。たとえば、 '/ weight(?!\ s *(?: change | percentile))/'は 'weight'にマッチします。しかし、あなたは非常に適切な使用のために、素早く基礎を拾うことができます。 //最も重要なことは:あなたの質問をはるかに具体的にしてください - 何が迷惑であるか教えてください。 – zdim

答えて

1

1)@Barmarはすでにそれを言いました:あなたが求めていることを行うためには^weight$がうまくいます。あなたはそれがあなたが望むもの、つまり「体重」をそれ自身で確信していますか?

2)/(?<!percentile)(?<!change)weight(?! ?change| percentile)/のようなことができます。 REエンジンは可変幅ルックバックをサポートしていないので、負のlookbehindは(?<!change |percentile)と書くことはできませんが、マッチはゼロ幅であるため、別々にリストすることができます。しかし、それはすべて非常に具体的に見えます。例えば失敗する。テキストに改行で区切られたこれらの単語が含まれている場合。

3)****waterに別のネガティブなビヘイビアを追加してください。

私は正規表現でそれほど良いことではありません:)そして、私は座ったことがなく、インとアウトを学ぶことに決めました。ユースケースを持っていなければ、かなり役に立たないです。あなたはちょうどそれを忘れるでしょう。今では20年以上前からregexenを使ってきましたが、数週間前にUnicodeプロパティにマッチさせるなど、新しいことを学んでいます。

+1

技術的には、 '^ weight $'は '' weight "'と '" weightの両方に一致します。\ n "' – ikegami

+0

本当にありがとうございます。申し訳ありませんが、私が試したことの多くは含まれていませんでした。 ^ weight $はリスト内の何ものともマッチしなかった私の驚いたことに(正規表現コードの場合と同様に)成功しませんでした。 私はコードを修正しようとしていました:/(?<!percentile私はこれを試しました:/(?<=パーセンタイル)(?<=変更)ウェイト(?=?変更|パーセンタイル)/ これは実際には何も一致しません。なぜそれが分かっていますか? :) –

+0

この変更は、 "重量"が "パーセント"と "変更"の前に同時に表示されるように要求していることを意味します。だから、決して何にもマッチしません。先読みは、交替を含むので単独で動作するので、先行するスペースの有無にかかわらず 'change'か' percentile'が許されます。 – mbethke

関連する問題