web-dev-qa-db-ja.com

2つの特殊文字の間のすべての文字を返す正規表現

Regxを使用して、2つの角括弧の間にあるすべての文字を返す方法を教えてください。以下に例を示します。

foobar['infoNeededHere']ddd
needs to return infoNeededHere

中括弧の間でそれを行う正規表現を見つけましたが、それを角括弧で動作させる試みはすべて失敗しました。その正規表現は次のとおりです。(?<={)[^}]*(?=})そして、ここにハックする私の試みがあります

(?<=[)[^}]*(?=])

最終的な解決策:

import re

str = "foobar['InfoNeeded'],"
match = re.match(r"^.*\['(.*)'\].*$",str)
print match.group(1)
20
user1130161

^.*\['(.*)'\].*$ は、行に一致し、グループに必要なものをキャプチャします。

[]\でエスケープする必要があります

Rubular.com proof リンクのドキュメントに、式の作成方法が説明されています。

20
user177800

これらの_[.....]_トークンが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']
_
10
Li-aung Yip