2

私が達成しようとしているのは、次のパターンを検索することですが、またはXXXxXXXのようなものは必要ありません。XXXXxXXXXXXxXXXX

次のことを試してみると、出力が得られません

test = "DDDfSSSsFFFjKKKk"
p = re.compile('(?![A-Z])[A-Z]{3}([a-z]{1})[A-Z]{3}(?![A-Z])')
x = p.findall(test)

私が最初から始めるとき(?![A-Z])、それはうまく機能しますが、それは回避の仕事をしませんがXXXXxXXX

test = "DDDfSSSsFFFjKKKk"
p = re.compile('[A-Z]{3}([a-z]{1})[A-Z]{3}(?![A-Z])')
x = p.findall(test)

私がここで間違っていることについて何か考えはありますか?

4

1 に答える 1

4

先読みアサーションではなく、後読みアサーションを使用する必要があります。

p = re.compile('(?<![A-Z])[A-Z]{3}([a-z])[A-Z]{3}(?![A-Z])')

現在の正規表現は次のように言っています。

(?![A-Z]) # Make sure that the next character isn't an uppercase ASCII letter 
[A-Z]{3}  # Now match three uppercase ASCII letters (<-- impossible>
于 2013-01-18T09:19:21.150 に答える