77407


# 問題

以下の文章があります。

[code]

    3\t名詞,数,*,*,*,*,*\n年\t名詞,接尾,助数詞,*,*,*,年,ネン,ネン\n前後\t名詞,副詞可能,*,*,*,*,前,マエ,マエ\nEOS\n
    
[/code]

この文章の`3`、`年`、`前後`を抽出したいです。  
`\n` (なくてもよい) と `\t` に挟まれた文字の抽出になります。

そして私が作った正規表現は以下になります。

[code]

    (\\n)?(.*)\\t
    
[/code]

すると最長マッチになってしまい、どうもとることができません。

[![画像の説明をここに入力](https://i.stack.imgur.com/FBA0G.png)](https://i.stack.imgur.com/FBA0G.png)

`?` をいれることで最短マッチにしたいのですが、こちらも結果は変わりません。

[code]

    (\\n)?(.*?)\\t
    
[/code]

どのようにすれば実現できるでしょうか。

正規表現は以下のサイトでチェックしております。

[正規表現チェッカー](https://www.ymori.com/regexcheck/)

わかるかた教えていただけますと嬉しいです。


CC BY-SA 4.0
2021-06-08T03:13:25.173
77401
2021-06-08T08:28:51.000
2021-06-08T08:28:51.000
3060
44467
question
python 正規表現
正規表現で一部を抽出したいのですが、教えていただきたいです。


`^(\d+?)\\t.*?\\n(.*?)\\t.*?\\n(.*?)\\t`

これで、$1, $2, $3にそれぞれ

> $1 : 3  
>  $2 : 年  
>  $3 : 前後

が代入されることを正規表現チェッカーで確認しました  
`^`は行の先頭を意味する正規表現なので、適宜置き換えて下さい


CC BY-SA 4.0
2021-06-08T04:02:22.247
77403
2021-06-08T04:02:22.247
14745
77401
answer


コメントいただきまして、findallで取得することができました。  
以下が取得したコードになります。

[code]

    text = "3\t名詞,数,,,,,\n年\t名詞,接尾,助数詞,,,,年,ネン,ネン\n前後\t名詞,副詞可能,,,,,前,マエ,マエ\nEOS\n"
    r = re.findall('(^|(?<=\n))(.*?)(?=\\t)', text) 
    print(r)
    
    # [('', '3'), ('', '年'), ('', '前後')]
    
[/code]

みなさまありがとうございました。


CC BY-SA 4.0
2021-06-08T06:06:55.847
77407
2021-06-08T06:06:55.847
44467
77401
answer