Regxを使用して、2つの角括弧の間にあるすべての文字を返す方法を教えてください。以下に例を示します。
foobar['infoNeededHere']ddd
needs to return infoNeededHere
中括弧の間でそれを行う正規表現を見つけましたが、それを角括弧で動作させる試みはすべて失敗しました。その正規表現は次のとおりです。(?<={)[^}]*(?=})
そして、ここにハックする私の試みがあります
(?<=[)[^}]*(?=])
最終的な解決策:
import re
str = "foobar['InfoNeeded'],"
match = re.match(r"^.*\['(.*)'\].*$",str)
print match.group(1)
^.*\['(.*)'\].*$
は、行に一致し、グループに必要なものをキャプチャします。
[
と]
を\
でエスケープする必要があります
Rubular.com proof リンクのドキュメントに、式の作成方法が説明されています。
これらの_[.....]
_トークンが1行に1つしかない場合、正規表現を使用する必要はまったくありません。
_In [7]: mystring = "Bacon, [eggs], and spam"
In [8]: mystring[ mystring.find("[")+1 : mystring.find("]") ]
Out[8]: 'eggs'
_
これらが行ごとに複数ある場合は、Jarrodの正規表現^.*\['(.*)'\].*$
を変更して、行ごとに複数回一致し、貪欲でないようにする必要があります。 (_.*?
_量指定子の代わりに_.*
_量指定子を使用します。)
_In [15]: mystring = "[Bacon], [eggs], and [spam]."
In [16]: re.findall(r"\[(.*?)\]",mystring)
Out[16]: ['Bacon', 'eggs', 'spam']
_