[英]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.