簡體   English   中英

Python正則表達式匹配路徑

[英]Python regular expression to match a path

我試圖寫一個正則表達式來匹配文件中的庫和包含該文件的路徑。 文件中的所有庫都將采用該格式。

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

所以如果我想找到mylib

我寫

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

有人可以幫助我在哪里出錯。

也許不需要正則表達式?

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'}

//引起問題的管道之前。 以下對我有用:

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

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

//不用於轉義,如果您想在原始字符串中轉義,單個\\就足夠了(非原始字符串則為double \\)就足夠了

需要稍微調整一下模式:

text = '''mylib|C://desktop//baseicmylib.lib
randlib|C://desktop//randlib.lib'''
str = 'mylib'
pattern = "%s\|(.+?\.lib)" %str
print re.findall(pattern,text)
>>>pattern = r'%s.*?lib'%str
>>>re.findall(pattern, text)
['mylib|C://desktop//baseicmylib']

這是正則表達式中的無貪婪匹配

*?,+?,??

'*''+''?' 限定詞都是貪婪的,它們匹配盡可能多的文本。 有時這種行為是不希望的; 如果RE <.*>與'title'匹配,它將匹配整個字符串,而不僅僅是。 加'?' 限定符使它以非貪婪或最小的方式執行比賽之后; 盡可能少的字符將被匹配。 使用。*? 在前一個表達式中將僅匹配“”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM