2013-07-09 4 views
1

Я пытаюсь разбить строку на подстроку, разделив ее на «И», а затем очистить каждую подстроку от «мусора».Использование REGEX по разделительной строке

Следующий код получаю ошибку:

AttributeError: 'NoneType' object has no attribute 'group'

import re 
def fun(self, str): 
    for subStr in str.split('AND'): 
     p = re.compile('[^"()]+') 
     m = p.match(subStr) 
     print (m.group()) 
+0

Какая ценность 'str'? – Racso

+2

Это то, что происходит, когда нет совпадения ... вам нужно проверить, содержит ли 'm' какие-либо элементы, прежде чем пытаться их« группировать ». – Floris

+0

используя try и исключая? –

ответ

1

Это означает, что match не найден, и он вернулся None.

Обратите внимание, что здесь вы можете использовать re.search вместо re.match. re.match соответствует только в начале строки, а re.search может искать в любом месте строки.

Из docs:

Python offers two different primitive operations based on regular expressions: re.match() checks for a match only at the beginning of the string, while re.search() checks for a match anywhere in the string (this is what Perl does by default).

Если вы уже знаете, что тогда вы можете справиться с этим None с помощью:

if m: 
    print (m.group()) 
else: 
    #do something else 
1

Если приведенный выше код, что вы действительно хотите сделать, не будет проще сначала удалить мусор, используя string.translate. Что-то вроде:

import string 

def clean_and_split(x): 
    return string.translate(x, None, r'^"()').split("AND") 
Смежные вопросы