次のリストがあります。
l = ['(PREDIR )?NAME SUFTYP|PREDIR NAME( SUFTYP)?', '(PREDIR )?NAME|PREDIR NAME', '(PREDIR )?PRETYP NAME SUFTYP( SUFDIR)?|PREDIR (PRETYP )?NAME( SUFTYP)? SUFDIR', '(PREDIR )?PRETYP NAME|PREDIR (PRETYP )?NAME', 'NAME SUFTYP( SUFDIR)?|NAME( SUFTYP)? SUFDIR', 'NAME SUFTYP|NAME( SUFTYP)?', 'NAME|NAME', 'PRETYP NAME ( SUFDIR)?|(PRETYP )?NAME SUFDIR']
?
の片面のみにが含まれているアイテムを検索し、 が含ま|
れている面のみに置き換えたい?
。
l
具体的には、内のアイテムを次のものに置き換えたい:
'(PREDIR )?NAME|PREDIR NAME'
->'(PREDIR )?NAME'
'(PREDIR )?PRETYP NAME|PREDIR (PRETYP )?NAME'
->'(PREDIR )?PRETYP NAME|PREDIR (PRETYP )?NAME'
'NAME SUFTYP|NAME( SUFTYP)?'
->'NAME( SUFTYP)?'
これを行う唯一の方法は、?
最初に右側ではなく左側をチェックし、次にその逆を行う反復プロセスを使用することです。
ただし、以下は機能しません。
for i in l:
i = re.sub(r'(.*?\?.*?)(\|.*?[^?].*?)',r'\1',i)