0

ファイル内のライブラリとファイルを含むパスに一致する正規表現を作成しようとしています。ファイル内のすべてのライブラリが の形式になります。

text = "mylib|C://desktop//baseicmylib.lib
        randlib|C://desktop//randlib.lib"

だから私がmylibを見つけたいなら

私が書いた

str = "mylib"
pattern = r'%s\\|.*lib'%str
mypath = re.findall(pattern,text)

私が間違いを犯している場所で誰かが私を助けることができますか。

4

4 に答える 4

3

おそらく正規表現は必要ありませんか?

text = '''mylib|C://desktop//baseicmylib.lib
    randlib|C://desktop//randlib.lib'''

libs = dict(line.split('|', 1) for line in
    (s.strip() for s in text.split('\n')))

結果:

{'randlib': 'C://desktop//randlib.lib',
   'mylib': 'C://desktop//baseicmylib.lib'}
于 2012-06-06T02:05:21.753 に答える
1

パイプの前の // が問題を引き起こしています。以下は私にとってはうまくいきます:

text = "argh|foo.lib"
str = "argh"
pattern = r"%s\|.*lib" %str
print re.findall(pattern,text)

['argh', '|hehe.lib']

// エスケープには使用されません。生の文字列内でエスケープしたい場合は、1 つの \ で十分です (生の文字列でない場合は 2 つの \ で十分です)。

于 2012-06-06T01:52:22.347 に答える
1

パターンを少し調整する必要があります。

text = '''mylib|C://desktop//baseicmylib.lib
randlib|C://desktop//randlib.lib'''
str = 'mylib'
pattern = "%s\|(.+?\.lib)" %str
print re.findall(pattern,text)
于 2012-06-06T02:01:52.003 に答える
0
>>>pattern = r'%s.*?lib'%str
>>>re.findall(pattern, text)
['mylib|C://desktop//baseicmylib']

正規表現で貪欲でない一致です

*?, +?, ??

'*''+'および'?'修飾子はすべて貪欲で、可能な限り多くのテキストに一致します。この動作が望ましくない場合もあります。RE<.*> が 'title' と一致する場合、'' だけでなく、文字列全体と一致します。「?」の追加 修飾子が非貪欲または最小限の方法で一致を実行させた後。できるだけ少ない文字が一致します。.* を使用していますか? 前の式では '' のみに一致します。

于 2012-06-06T02:06:45.397 に答える