0

私は次のようなXMLファイル構造を持っています:

 <word id="15" pos="SS">
          <token>infarto</token>
          <lemmas>infarto</lemmas>
         </word>
         <word id="16" pos="AS">
          <token>miocardico</token>
          <lemmas>miocardico</lemmas>
         </word>
         <word id="17" pos="AS" annotated="head">
          <token>acuto</token>
          <lemmas>acuto</lemmas>
         </word>
         <word id="18" pos="E">
          <token>in</token>
          <lemmas>in</lemmas>
         </word>
         <word id="19" pos="SS">
          <token>corso</token>
          <lemmas>corso</lemmas>
         </word>

私がやろうとしているのは、単語id 17(注釈付き=「head」のもの)を持つ単語を囲む単語の「pos」と「token」の値を取得することです。

これは、単語17の後に続くすべての一致に問題はありません。

(pos=")(.+)(")(\s\S+?)("head")([\s\S]+?)(>)(\w+?)(<+)([\S\s]+?)(pos=")(.+)(")([\s\S]+?)    (token>)(.+)(<)([\s\S]+?)

これにより、必要なすべての情報が得られます。拡張したい場合は、追加するだけです。

(pos=")(.+)(")([\s\S]+?)(token>)(.+)(<)([\s\S]+?)

最後まで。きれいではありませんが、機能します。

今、私が反対方向に行きたいと思うとき、私は絶対に困惑しています

(pos=")(.+)(")([\s\S]+?)(token>)(.+)(<)([\s\S]+?)(pos=")(.+)(")(\s\S+?)("head")

単語16(「注釈付きヘッド」の前の最初の情報)の情報だけを照合するのではなく、前にあるすべての情報(単語15、単語14、単語13など)を照合します。

私は何が欠けていますか?

PS XMLパーサーを使用することは、残念ながらオプションではありません。

4

2 に答える 2

0

データが整形式のXMLであることを確認した場合。私はそれが可能だと思います、これらのステップで試してください:

step1:<word[^>]*>([^<]*(?:(?!<\/?word)<[^<]*)*)<\/word>(ref http://regexr.com?31org)step2:step
1(group 1)から文字列を取得し、<token[^>]*>([^<]*(?:(?!<\/?token)<[^<]*)*)<\/token>(ref http://regexr.com?31ora)または<lemmas[^>]*>([^<]*(?:(?!<\/?lemmas)<[^<]*)*)<\/lemmas>(ref http://regexr。 com?31ord

要件に合わせてこれらのパターンを変更してみてください:)

参照:正規表現の3番目の習得

于 2012-08-07T12:25:02.013 に答える
0

私はそれがそのようなものであるべきだと思います:

(?s)(<word(?:(?!<word).)*)<word[^>]*?annotated="head".*?(<word[^>](?:(?<!</word>).)*)

その結果、グループ#1にはid = 16のノード「word」が含まれ、グループ#2にはid=18のノード「word」が含まれます。

次に、次のように正規表現を使用して、これらの各ノードを個別に解析できます。

(?s)<word[^>]*?pos="(?P<pos>[^"]+).*?<token>(?P<token>[^<]+)

そして、2つのグループ「pos」と「token」を取得します。

もちろん、単一の正規表現を使用することもできますが、かなり醜いものになります。

于 2012-08-07T18:04:11.990 に答える