私はこのような文字列を持っています:
String s = "word=PS1,p1,p2,p3=q1,q2|word2=PS3,p4,p5,p6=q3";
またはこのように:
String s2 = "word3=PS2,p7,p8=q4,q5,q6|=PS3,p9=";
またはこのように:
String s3 = "=PS3=";
したがって、形式的には、文字列には「|」で分割された辞書の単語定義が含まれています。シンボル。
ここ:
word - 辞書内の単語 (オプション、S2 や S3 など)
PS1、PS2、PS3 - 品詞タグ (必須)
p1,p2,... - いくつかのパラメータ (オプション)
q1、q2、q3、... - いくつかの別のパラメータ (これもオプション)
テキスト内のそのような文字列のすべての出現を検出し、グループを提供する正規表現を構築したいと思います。
- group1 - 単語
- group2 - 品詞タグ
- group3、group4、... - パラメータ p
- group(k), group(k+1), ... - 別のパラメータ (q)
最後の p パラメータと最初の q パラメータのグループのインデックスは気にしません。最初のグループ - 単語 (null の可能性あり)、2 番目のグループ - 品詞、およびその他のグループ - パラメータ p および q であることを知っておく必要があります。
今、私はそのような正規表現を持っています:
"([a-z]*)?=([A-Z]+)(,?[a-z]+)*=(,?[a-z]+)*")
しかし、正しく動作しません。最後のパラメータ p と q だけが表示されます。つまり(S2の場合):
- group1 = word3 - OK
- group2 = PS2 - OK
- group3 = p8 - NOT OK (最後の p パラメータのみ)
- group4 = q6 - NOT OK (最後の q パラメータも)
私たちを手伝ってくれますか?
UPDATE : "="-character p パラメーターと q パラメーターの間の分割文字のみ。私の問題では必要ありません。pパラメータとqパラメータは違うものではないと考えるべきです。
実際の入力の例:
String s = "bread=NOUN,plur,link=form|=VERB="