Использование '\n' для размещения результатов регулярных выражений в строке для разделения. '+' неподдерживаемый операнд

Итак, вчера я получил свое регулярное выражение для печати строка за строкой. Сегодня я удалил свой оператор if, установил «результат» равным регулярному выражению, чтобы я мог добавить его в свой список. Ну, это сломало мой (dns+'\n'). Может родственно или нет. ошибка, которая отображается для меня, заключается в следующем.

    dns.append(result+'\n')
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'

Код:

import re
import pandas as pd

dns = []
addstrip = []
with open('ns.txt', 'r') as file:
    lines = file.read().splitlines()

    for line in lines:
        #result = (re.search(r'(\W\S+)(\.)(\S+)(\.)(\S\S\S+)', line))
        result = (re.search(r'^(add lb vserver) (\S+)(\.)(\S+)(\.)(\S+)', line))
        dns.append(result+'\n')
        print(dns)
    with open('dnsout.txt', 'w') as f:
        f.writelines(str(dns))

Вывод без '\n'

[None]
[None, None]
[None, None, None]
[None, None, None, None]
[None, None, None, None, None]
[None, None, None, None, None, None]

СТАРЫЙ код:

dns = []
with open('ns.txt', 'r') as file:
    lines = file.read().splitlines()
    for line in lines:
        if re.search(r'^(add lb vserver )(\S+) (\S+) (\S+)(.+)$', line):
            dns.append(line)
            print(dns)
    with open('dnsout.txt', 'w') as f:
        f.writelines(lines)

Более поздний вывод после «Нет»:

match='add lb vserver SSL_INT_unucrepSL.oncologysupply.c>, <_sre.SRE_Match object; span=(0, 51), match='add lb vserver SSL_EXT_unucrepSL.oncologysupply.c>, <_sre.SRE_Match object; span=(0, 57), match='add lb vserver SSL_INT_hotfixunucrepsl.oncologysu>, <_sre.SRE_Match object; span=(0, 57), match='add lb vserver SSL_EXT_hotfixunucrepsl.oncologysu>, <_sre.SRE_Match object; span=(0, 57), match='add lb vserver SSL_EXT_hotfixunucwcfsl.oncologysu>, <_sre.SRE_Match object; span=(0, 57), match='add lb vserver SSL_INT_hotfixunucwcfsl.oncologysu>, <_sre.SRE_Match object; 

В приведенном выше коде я распечатывал не результаты регулярного выражения, а всю строку. Вывод был построчным, хотя, возможно, результаты регулярных выражений имеют другой тип данных?

Панды используются позже в коде ниже, поэтому вы можете игнорировать. Как можно разделить по строке? Я предполагаю, что мне нужно будет преобразовать его в какой-то другой тип, который может принимать +'\n'. Любая помощь, советы или уловки приветствуются. Спасибо за чтение.


person Yepram Yeransian    schedule 06.02.2018    source источник
comment
У вас было «if result:» до dns.append ?   -  person gout    schedule 07.02.2018
comment
Я отредактирую свой пост и включу его.   -  person Yepram Yeransian    schedule 07.02.2018
comment
Когда regex.search не может найти текст, соответствующий вашему выражению (r'...'), он возвращает None, вы пытались добавить '\n' к None.   -  person gout    schedule 07.02.2018
comment
Вы хотите, чтобы результат None был заменен пустой строкой '', или это приведет к проблемам позже?   -  person Jongware    schedule 07.02.2018
comment
Не уверен, где бы я добавил '\ n' к None. Я обновил приведенное выше тем, что идет после None   -  person Yepram Yeransian    schedule 07.02.2018
comment
Вовсе нет, None не важны, поэтому я не возражаю против их удаления.   -  person Yepram Yeransian    schedule 07.02.2018
comment
Прочитайте слова сообщения об ошибке. Очевидно, что ваш re.search не находит соответствия, то есть возвращает None, и вы не можете добавить None и str.   -  person Ken White    schedule 07.02.2018
comment
Но в этом случае, если я переключу re.search на re.split, я все равно не могу +'\n', даже если на выходе нет None   -  person Yepram Yeransian    schedule 07.02.2018


Ответы (1)


Согласно вашим комментариям,

import re
import pandas as pd

dns = []
addstrip = []

    with open('ns.txt', 'r') as file:
        lines = file.read().splitlines()

        for line in lines:

            result = (re.search(r'^(add lb vserver) (\S+)(\.)(\S+)(\.)(\S+)', line))
            if result:
               dns.append(result.group(x)+'\n') # x is the group number that you would need. 
               print(dns, end=",")
        with open('dnsout.txt', 'w') as f:
          f.writelines(str(dns))
person gout    schedule 07.02.2018
comment
TypeError: неподдерживаемые типы операндов для +: '_sre.SRE_Match' и 'str' - person Yepram Yeransian; 07.02.2018
comment
Должен быть способ реструктурировать его или изменить тип данных, чтобы добавить +'\n' - person Yepram Yeransian; 07.02.2018
comment
Я заметил, что все, что должно быть на следующей строке, на самом деле заканчивается запятой. Может быть, после того, как это написано, как-то разделить их запятой. хм - person Yepram Yeransian; 07.02.2018