2017-09-01 64 views
-4

我有一樣行列表:向後搜索python?

=cat-egory/packagename-version 

所以我要它分爲3個不同的變量,如

category = cat-egory 
package_name = packagename 
package_version = version 

我必須避免 =/ 字符

我喜歡Perl,所以我曾經寫過這樣的正則表達式:

(?<==)\w+.\w+ 

這會給我cat-egory沒有領先=字符

等,但據我所知?<=不蟒蛇的工作,我必須如何提取數據呢?

+1

當你嘗試過時發生了什麼? –

+2

Python確實有一個「?<=」標誌。根據文檔,它「匹配如果字符串中的當前位置前面匹配」...「匹配在當前位置。」這不是它在perl中的作用嗎? – Kevin

+2

瘋狂猜測:嘗試使用're.search'而不是're.match'。 – Kevin

回答

0

似乎工作好吧,也許你只是缺少基本的Python框架捕捉:

import re 

text = "=cat-egory/packagename-version" 
results = re.search("(?<==)\w+.\w+", text) 
if results: 
    print (results.group(0)) 

輸出:

cat-egory 

確保使用.search代替.search按照建議通過評論。 .group是你如何引用你所捕獲的,而不是perl中的$ 1。這裏沒什麼特別:)

1

它似乎運作良好。請參閱:https://regex101.com/r/nnMRKd/2

+0

以上的評論你是否保證Python的正則表達式解析器的工作原理與regex101.com上的一樣? – Kevin

+0

另外,請不要鼓勵OP誰不閱讀文檔或嘗試自己的代碼。 –

+0

我也在那裏測試過,並且得到了積極的結果,但是它在腳本本身中沒有按預期工作 –

0

你甚至可以更進一步,並使用元組拆包:

import re 

string = "=cat-egory/packagename-version" 

rx = re.compile(r'(?<==)([^/]+)/([^-]+)-(.+)') 

for match in rx.finditer(string): 
    category, package_name, version = match.groups() 
    print(category) 
    # cat-egory