2012-04-02 31 views
0

文字列の最初の出現を特定の他の文字列の後に特定のパターンの間で探したいと思います。私が解析している文書はxmlではありませんが、同様の開始/終了規則があります。そして、私は見てされるものの例:与えられたパターンの後のシンボル間のパターンの一致

...b.filext", "{xxxxx-xxx-xxx-xxx-xxxxxxxxxxx}" 

と私は右vcxprojの発生、それが文書で起こるたびの後、間の{と}の文字列を取得しようとしています。 は、私は次のことを試してみましたが、私はなしのリストを取得:

my_list=[] 
for line in text.split('.vcxproj'): 
    if '{' in line: 
     my_list.append(re.match(r"(?<=\{)(.*?)(?=\})", line)) 

私は私の表現が、なしの成功を変更しようとしています。助けて ?ありがとうございました。

+0

注構文は(一致するテキストも列として発生する可能性があります)再帰的でない場合、それはXMLのようではないということ。これは再帰的性質であり、正規表現はXML解析には適していません。 – outis

答えて

1

方法について:

re.findall(r"vcxproj.*?\{(.*?)\}", text) 
+0

これは完璧です! – Thalia

2

re.matchは、文字列の先頭にのみ一致します。試してくださいre.search。または、ループをre.findallに置き換えてください。

+0

ありがとう、私はマッチを取得しています。しかし、実際の文字列ではなく、<_sre.SRE_Match object at 0x023AE220>のように見えます...私はそれを期待していませんでしたか? – Thalia

+1

@ user1217150: 're.search'は' match'オブジェクトを返します。一致した文字列にアクセスするには、一致オブジェクトの '.group()'または '.groups()'を呼び出す必要があります。 –

+0

@ user1217150:[re documentation](http://docs.python.org/library/re.html)を読んでください。これまでのところ、あなたの質問はすべて回答されています。 [意味のあるユーザー名](http://tinyurl.com/so-hints)を選ぶことを検討し、[@replies](http://meta.stackexchange.com/q/43019/133817)の通知を受け取ります。 – outis

関連する問題