0

インラインXMLファイル(xmlタグ+テキスト)があります。特定のタグの前に4つの単語を取得したい。例:

ケース1:

I used to live in <Location>London</Location>.

ケース2:

I work for <Organization> Microsoft Tech.</Organization>
which is in <Location>London</Location>

どちらの場合も、ロケーションタグの前に4つの単語を取得したいと思います。

出力:

ケース1:

used to live in

ケース2:

</Organizattion> which is in

これは可能ですか?誰か助けてくれませんか?

4

3 に答える 3

1

さて、最も簡単なのは次のとおりです。

((?:\S+\s+){4}\s*)<Location>

これは、空白で区切られた非空白の実行を想定しているため、2番目のケースでは望ましい結果が得られないことに注意してくださいTech.</Organization> which is in

于 2012-03-12T14:45:55.247 に答える
0

これはクレイジーであり、使用することはお勧めしませんが、次のようにして次のことができますawk

awk '/<Location>/ {n=gensub("(.*)<Location>.*","\\1","g",$0); print gensub(".*[ .]([^ .]+ [^ .]+ [^ .]+ [^ .]+) *$","\\1","g",n)} ' INPUTFILE

[^ .]単語の一部を適切に判断するために、パーツを変更する必要がある場合があります。

  1. これは次の行で動作します<Location>
  2. まで行の一部を保存します<Location>
  3. 見つかった 4 つの単語を出力します。(一致しない場合は、以前に保存した行部分が印刷されることに注意してください。)
于 2012-03-12T15:04:32.267 に答える
0

必要な正規表現は、正のルックヘッド ベースである必要があります。あなたの2つのケースでは、次のように動作します:

/(?:[<>\/\w]+\s*){4}(?=<Location>)/s

上記の正規表現を使用したデモが必要な場合はお知らせください。

于 2012-03-12T15:06:38.180 に答える