0

次の A. (Python) まで、文字列内の A.. のすべてのグループに一致する正規表現パターンを実行しようとしています。

例: DFDAXDJSDSJDAFGCJASDJASAGXCJAD に:

'AXDJSDSJD'
'AFGCJ'
'ASDJ'
'AS'
'AGXCJ'
'AD'

私が思いついた最も近いものは次のとおりです。

string="DFDAXDJSDSJDAFGCJASDJASAGXCJAD"
r=re.compile('(A.[!=A]*)+')
matchObj = r.findall(string, re.M|re.I)

返すAF, AS, ASA, AD

最初のものをスキップするのはなぜですか?次の A まですべての文字を返さないのはなぜですか?

4

2 に答える 2

2

文字列を次のように分割できます。A

>>> s = "DFDAXDJSDSJDAFGCJASDJASAGXCJAD"
>>> s.split('A')
['DFD', 'XDJSDSJD', 'FGCJ', 'SDJ', 'S', 'GXCJ', 'D']

# add a leading `A` to each match 'on the fly'
>>> [ 'A%s' % s for s in  s.split('A') ]
['ADFD', 'AXDJSDSJD', 'AFGCJ', 'ASDJ', 'AS', 'AGXCJ', 'AD']

または、オプションの正の先読みを使用します。

>>> re.findall('(A[^A]+(?=A)?)', s, re.IGNORECASE | re.MULTILINE)
['AXDJSDSJD', 'AFGCJ', 'ASDJ', 'AS', 'AGXCJ', 'AD']

または単純に(次の Aを気にしない場合-これはオプションであると言うのと同じです):

>>> re.findall('(A[^A]+)', s, re.IGNORECASE | re.MULTILINE)
['AXDJSDSJD', 'AFGCJ', 'ASDJ', 'AS', 'AGXCJ', 'AD']
于 2013-06-01T13:47:20.290 に答える
2

次の方法を提案できます。

string="DFDAXDJSDSJDAddaFGCJASDJASAGXCJAD"
r=re.compile('A[^A]*', re.I|re.M)
matchObj = r.findall(string)
matchObj
于 2013-06-01T13:51:30.997 に答える