0

正規表現でのルックアラウンドに問題があります。

ここで問題: 編集したい大きなファイルがあります。関数を変更して、最初のパラメーターを保持し、2 番目のパラメーターを削除したいと考えています。

私たちが持っているとしましょう:

func1(paramIWantToKeep, paramIDontWant)

また

func1(func3(paramIWantToKeep), paramIDontWant)

で変更したい:

func2(paramIWantToKeep)どちらの場合も。

だから私は前向きな先読みを使ってみます

func1\((?=.+), paramIDontWant\)

ここで、最初のパラメーターを選択しないようにします (その後、かっこで同じことを行うことができます)。

しかし、それは機能しません。私の正規表現は、正の先読み (.+) を無視した後、先読み(, paramIDontWant\))の前と同じ位置を探しているようです (開き括弧)

したがって、私の質問は、一致するグループの後に正規表現を継続する方法です。ここでは (.+) の後です。

ありがとう。

PS:私の質問の英語および/または悪い構造で申し訳ありません。

編集:Sublime Textを使用しています

4

3 に答える 3

1
import re
t = "func1(paramKeep,paramLose)"
t1 = "func1(paramKeep,((paramLose(dog,cat))))"
t2 = "func1(func3(paramKeep),paramDont)"
t3 = "func1(func3(paramKeep),paramDont,((i)),don't,want,these)"

reg = r'(\w+\(.*?(?=,))(,.*)(\))'

keep,lose,end = re.match(reg,t).groups()
print(keep+end)

keep,lose,end = re.match(reg,t1).groups()
print(keep+end)

keep,lose,end = re.match(reg,t2).groups()
print(keep+end)

keep,lose,end = re.match(reg,t3).groups()
print(keep+end)

プロデュース

>>> 
func1(paramKeep)
func1(paramKeep)
func1(func3(paramKeep))
func1(func3(paramKeep))
于 2013-05-03T11:58:35.810 に答える