4

これは、reモジュールを使用してPythonで作成しようとしたパターンオブジェクトです。私が目指しているのは、文字列「(\ examples x)(Px * Qx)」を取り、「Px*Qx」の部分だけを見つけるものです。先読みアサーションと後読みアサーションを使用しようと思いました。これを間違って使用しているかどうか、または(文字に何か問題があるかどうかはわかりません。

p = re.compile(r'?<=[(]\w+?=[)]')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/re.py", line 190, in compile
    return _compile(pattern, flags)
  File "/usr/lib/python2.7/re.py", line 244, in _compile
    raise error, v # invalid expression
sre_constants.error: nothing to repeat
4

1 に答える 1

3

問題

  1. 後読みを適用するには、トークンをグループに入れる必要があります(括弧を追加します)。(?<=[(]\w+(?=[)]))

  2. Pythonは、ルックビハインド内での変数の繰り返しをサポートしていません。だから、そこに書くことはできません\w+

  3. 後読みだけの正規表現は何にも一致しません!後読みとは、「このことを一致させてから、同じ開始位置にとどまり、正規表現の次の部分と一致させる」ことを意味します。しかし、あなたの場合、次の部分はありません。したがって、一致するものはありません。

解決

最後の括弧内のテキストを取得する場合:

^.*\((.*?)\)$

最初の括弧をスキップして、括弧を削除する残りの部分を取得する場合:

^\(.*?\)\((.*)\)$

適切な正規表現を作成できるように、必要なものをより具体的に定義してください。

于 2012-08-31T09:18:24.670 に答える