2017-06-22 4 views
0

は、ここで抽出サブ

は私のスクリプトです:

import re 
_text = "sdiskpart(device='D:\\', mountpoint='D:\\', fstype='FAT32', opts='rw,fixed')" 
print(re.findall("device=(\\'.*\\')", _text)) 

私はこれで、デバイスの値を取得しようとしています文字列には "D:\" だ正規表現とuは、私が試した見ることができるように

"( '* \' \)デバイス=" を、それが返さ:

[ " 'D:\'、マウントポイントを= 'D:\'、fstype = 'FAT32' 、opts = 'rw、fixed' "]

私はREgexの専門家ではありません。どうすればD:\を受け取り、印刷することができますか?

+0

>>> print(re.findall( "device =(\\ '[AZ]:\\\\')"、_text )) ["'D:\\'"] –

答えて

2

あなたがいることを。非熱心な正規表現

import re 

print(re.findall("device='(.*?)'", _text)) 

通知を使用することができます*を使用していると思いますか?非熱心であることを意味するので、次の文字までは最小の文字数を取るでしょう...

+0

'([^ '])'(逆引用符の文字クラス、つまり引用符以外のすべての文字)と比較して、パフォーマンスの違いは何ですか? – njzk2

+1

@ njzk2 - running * timeit *の結果、 "。*?"少し遅いです。どちらもバックトラックを必要としませんが、私はそれらがやや複雑な順序であると思います。 –

1

あなたは[A-Z]と*交換する必要がある場合がありますhttps://docs.python.org/3/library/re.html

>>> print(re.findall("device=(\\'[A-Z]:\\\\')", _text)) 
["'D:\\'"] 

を参照してください。私は、ドライブ文字が大文字で常に他[A-ZA-z]は

+0

[AZ]の後に\\\\はありません。 – DarkSuniuM