質問があいまいですので、回答に困ります。
"山田さんは定年退職しました"という文字列が与えられたとき、それは定年と定年退職を含む文字列と判定したいのでしょうか。それともそうでないと判定したいのでしょうか。
また、この質問は"定年"と"定年退職"だけについて回答すれば良いのでしょうか。それとも一般的に複数の文字列を指定した場合を含んだ質問なのでしょうか。
質問によって、ひとつの正規表現で見つけられるものもあれば、ある程度長いプログラムを書かないと出来ないものもあります。汎用的なコードを作れない可能性もあります。
john_doe_さんの希望に沿っているかどうかわかりませんが、回答の案を作りました。
定年と定年退職を区別して全部取り出すと言う条件と、順序を取り替えても結果が同じという条件は満たしています。
pythn
1re.findall('定年(?!退)|定年退職', elem)
2re.findall('定年退職|定年(?!退)', elem)
3
実行してみます。
python
1>>> re.findall('定年(?!退)|定年退職','定年になった山田さんは定年で退職しました')
2['定年', '定年']
3>>> re.findall('定年(?!退)|定年退職','定年になった山田さんは定年退職しました')
4['定年', '定年退職']
5>>> re.findall('定年(?!退)|定年退職','定年退職になった山田さんは定年で退職しました')
6['定年退職', '定年']
7>>> re.findall('定年(?!退)|定年退職','定年退職になった山田さんは定年退職しました')
8['定年退職', '定年退職']
9>>>
10>>> re.findall('定年退職|定年(?!退)','定年になった山田さんは定年で退職しました')
11['定年', '定年']
12>>> re.findall('定年退職|定年(?!退)','定年になった山田さんは定年退職しました')
13['定年', '定年退職']
14>>> re.findall('定年退職|定年(?!退)','定年退職になった山田さんは定年で退職しました')
15['定年退職', '定年']
16>>> re.findall('定年退職|定年(?!退)','定年退職になった山田さんは定年退職しました')
17['定年退職', '定年退職']