2014-10-13 3 views
0

Я попытался запустить следующие коды, и я продолжаю получать ошибки, как показано ниже. Когда я удаляю re.sub (r '/ n', ''), я получаю ту же ошибку для следующей (& $ [^ \ s]. Я знаю, что это связано с регулярным выражением, но я не знаю, что .. неправильно Пожалуйста, помогите мне, я провел всю ночь, чтобы понять это входной список строк и возвращается из find_sentences (текст):.Продолжайте получать ошибки типа

def find_sentences(text): 
    k = re.compile(r'[^\.]*\.[^\.]*succession[^\.]*\.[^\.]*\.') 
    k2 = k.findall(text) 
    if len(k2)>1: 
     k3 = '######################################'.join(str(i) for i in k2) 
    else: 
     k3 = k2 
    return k3 

q1=find_sentences(replacement) #replacement is a text. 
q2 = re.sub(r'\n','', q1) 
q3 = re.sub(r'&#[^\s]+;','', q2) 
q4 = re.sub(r' ','', q3) 
q5 = re.sub(r'\\','',q4) 
sentence = re.sub(r'<[^>]+>','',q5) 

Это ошибка:

Traceback (most recent call last): 
    File "C:\Users\Ahn\Desktop\text_module ver 1.py", line 135, in <module> 
    dataValues=do_combination(fullPath) 
    File "C:\Users\Ahn\Desktop\text_module ver 1.py", line 100, in do_combination 
    q2 = re.sub(r'\n','', q1) 
    File "C:\Python27\lib\re.py", line 151, in sub 
    return _compile(pattern, flags).sub(repl, string, count) 
TypeError: expected string or buffer 
+0

Вы пытались использовать разрыв строки в отладчике, чтобы проверить, что q1 имеет допустимый тип в соответствующей строке? –

+0

Джаред, как его проверить? извините, я новичок. Благодарю. –

+0

Зависит от того, как вы используете свой код, но если вы используете среду IDE, которая позволяет запускать код и устанавливать разрыв строки, выполнение будет остановлено в этой строке, и вы можете проверить значения переменных. Если вы не знаете, как использовать отладчик, прекратите писать код, пока не сделаете это. Это сэкономит вам значительное количество времени и неизмеримо большое количество головных болей. –

ответ

0

Функция findall возвращает список строк. Ключевым моментом является то, что он всегда возвращает список, поэтому я не уверен, что точка вашего теста len(k2)>1.

Проблема в том, что k2 - это список из одного элемента (который отличается от строки). Похоже, что вы могли бы изменить свой код к следующему, и он может делать то, что вы хотите:

k2 = k.findall(text) 
k3 = '######################################'.join(k2) 
return k3 

Однако, это не совсем ясно, что вы хотите, так что вам придется поэкспериментировать.

+0

Мне нужно len (k2)> 1, потому что findall возвращает один элемент для некоторых текстов, но возвращает более одного элемента для других. В последнем случае я попытался сделать два элемента в виде одной строки, разделенной на ##########. –

+0

Да, но в случае, когда 'findall' возвращает один элемент,' join' не будет добавлять разделитель, потому что есть только один элемент. Наименьшее изменение вашего существующего кода, которое могло бы заставить его работать, состояло в том, чтобы изменить 'k3 = k2' на' k3 = k2 [0] '. –

+0

удаление str() устраняет проблему. Спасибо, парни. –

Смежные вопросы