2011-04-01 52 views
0

我想用正則表達式做在Python如下:Python的正則表達式的幫助

我給出的字符串,如列表: 'abc01 - [def02] - ghi03 - jkl04'

每個字符串將具有不同數量的項目。有些會有括號,有些則不會。

有人可以幫助我完成一個正則表達式匹配,它只包含不在括號內的項目嗎?需要刪除虛線和空格。因此,對於上面的例子中,輸出將是: [abc01,ghi03,jkl04]

感謝

回答

9

正則表達式是真的這個職位的最佳工具?

>>> S = 'abc01 - [def02] - ghi03 - jkl04' 
>>> [x for x in S.split(' - ') if not (x.startswith('[') or x.endswith(']'))] 
['abc01', 'ghi03', 'jkl04'] 
2
>>> a='abc01 - [def02] - ghi03 - jkl04' 
>>> [ i for i in a.split(" - ") if "[" not in i ] 
['abc01', 'ghi03', 'jkl04'] 
0

下面的正則表達式將解決你的問題:

\b(?<!\[)\w+ 

的Python代碼則是:

for match in re.finditer(r"\b(?<!\[)\w+", input_line): 
    item = match.group() 

注:

  • \b稱,該項目開始於一個字破,而不是在一個項目的中間
  • 負回顧後(?<!\[)稱,該項目不是由[
  • \w+之前的項目至少匹配一個連續字字符,儘可能多的
0

從上面的介紹,你只需要使用的findAll()來匹配的字母和數字序列(使用短碼\ W匹配字母和下面的數字)。

>>> import re 
>>> re.findall(r'\w+', 'abc01 - [def02] - ghi03 - jkl04') 
['abc01', 'def02', 'ghi03', 'jkl04']