0

私は正規表現に非常に慣れていません。3時間ほど前に拾ったばかりなのですが、ひっかかり、なかなか振れません。それで、いつものように、すべての問題を解決するためにインターネットに目を向けましたが、答えを説明できなかったときは、他の誰かが私の質問をしたかどうかを確認するためにスタックオーバーフローを検索し、最終的に新しい質問を投稿しました。ブラウジングから自分で答えることができませんでした。

ほとんどのことは理解できたので、私がやろうとしていることを少し口にしますが、このほんのわずかな部分は、私が望むように機能していないか、実際にはまったく機能していません。全体の混乱は複雑で説明が難しいですが、最終的には、正規表現を実行したい文字列がたくさんあります。

したがって、繰り返しループの中で、変数名を含む文字列を渡します。ここで、変数がどのように見えるかを説明するのに苦労しています。そのため、例のリストにパイプを続け、抽出したいものを続けます。

Variable | (Variable)
Variable.list[3]name | (Variable.list[3]name)
Var.list[5] | (Var.list , 5)
Var.list_name[3]thing_words[4][3][2] | (Var.list_name[3]thing_words , 4 , 3 , 2)
Var[3] | (Var , 3)
Var.word | (Var.word)

等々。それは明らかだと思いますよね?角かっこを含む場合と含まない場合がある変数名が必要です。末尾に角かっこがある場合は、それらを名前から除外してキャプチャし、match.groups() からアクセスできるようにします。名前が ...[] で終わり数字が入っていない変数はないと思いますが、あるかもしれませんし、あるとしても無視したいと思います。

今、私は次のようなことをしようとしています:

for line in list:
regex = re.compile("^[-\w\[\]\.]+(\[(0-9)*]\])*$")
match = regex.match(line)
if match:
do something that depends on len( match.groups() )

しかし...うまくいきません。正規表現は、一致するはずだと思っても一致しません。

私の心では、私は非常に明確です!一連のもので始まり、括弧で囲まれた数字で終わる可能性があり、括弧で囲まれた数字で終わる場合は、それらをキャッチして保存しますが、文字列の最後にない括弧で囲まれた数字は無視します。

それで... 少し冗長になるまで自分自身を徹底的に説明したので... 思い通りに機能させるにはどうすればよいですか? 私がやろうとしている方法でそれを行うことさえできますか?代わりに、次のようなことをする必要があります。

while (match.endswith("]")
match.strip("]")
func()
match.strip("[")

func() が末尾から数字を削除するために正規表現を実行する場所はどこですか? それは非常に複雑で、非常に面倒です。私の腸は、正規表現がそれを処理できることを教えてくれます。私の初心者の目には、その方法がわかりません。

4

2 に答える 2