2011-06-22 9 views
0

私は次の行を持っている:Python:区切られた部分を無視するには?

CommonSettingsMandatory = #<Import Project="[\\.]*Shared(\\vc10\\|\\)CommonSettings\.targets," />#,true 

を、私は次の出力をしたい:

['commonsettingsmandatory', '<Import Project="[\\\\.]*Shared(\\\\vc10\\\\|\\\\)CommonSettings\\.targets," />', 'true' 

私はカンマでシンプルな正規表現をすれば値がそれでありますならば、それは値を分割しますターゲットの後にカンマを書いたように、ここで分割されます。 だから私は##の間のテキストを無視してそこに分割がないことを確認したい。 私は本当にやり方を知らない!

+0

デリミタとは何ですか?あなたは '='と '、'の両方を使っているようです。 –

答えて

0

http://docs.python.org/library/re.html#re.split

import re 

string = 'CommonSettingsMandatory = #toto,tata#, true' 
splitlist = re.split('\s?=\s?#(.*?)#,\s?', string) 

など、最初の文字列、第二のためm.group(2)ためm.group(1)を使用しています。

+0

これは素晴らしいですが、うまくいきませんでした...まだ完全な文字列を返します –

+0

re.split( '\ s?#(。*?)#\ s?'、string)ありがとう! –

+0

ようこそ。 – JAB

0

あなたはlookbehindでsplitを使用できるかもしれませんが、私はこの式で取り込まれたグループを使用します。

(\S+)\s*=\s*##([^#]+)##,\s*(.*) 

m = re.Search(expression, myString)。その後splitlist['CommonSettingsMandatory', 'toto,tata', 'true']が含まれてい

+0

Lookbehindは必要ありません。 're.split'は、分割パターンでキャプチャグループが保持する値を返します。 – JAB

0

私が正しく理解している場合、区切り文字としてスペースを使用して文字列を分割しようとしていますが、シャープ記号の間のテキストも削除しますか?

これが正しい場合は、のポンド記号で区切られた文字列を削除してから、の文字列を分割するのはなぜですか?

import re 
myString = re.sub(r'#.*?#', '', myString) 
myArray = myString.split(' ') 

EDIT:(改訂質問に基づいて)

import re 
myArray = re.findall(r'^(.*?) = #(.*?)#,(.*?)$', myString) 

実際の形で、自分の試合を含むタプルの配列を返します。

[ 
    (
     'commonsettingsmandatory', 
     '<Import Project="[\\\\.]*Shared(\\\\vc10\\\\|\\\\)CommonSettings\\.targets," />', 
     'true' 
    ) 
] 

(フォーマットをより良く説明するためにスペースを追加)

+0

区切り記号としてカンマを使用して分割しようとしています。 –

+0

@Vincent S:上記の更新された回答を参照してください。 –

関連する問題