Чтение одинаковых совпадений с использованием regex и сохранение в csv в несколько строк

У меня есть txt файл :

Your Name: Arya Arjun
Subject Name :
    Math

Your Name: Arya Arvind
Subject Name :
    Science

Я использую regex для получения имени: ^Ваше имя:[\S](.)

Код :

filename = "Path/File.txt"
fo = open(filename, 'r')
lines = fo.readlines()

name = ""
for line in lines:
    match = re.findall("^Your Name:[\S]*(.*)", line)

    if len(match) > 0:
        name += ",".join(match)
print("-----------Your Name------------")
print("name :",name)

O/P > имя: Арья Арджун Арья Арвинд

поэтому он сохраняет имя в csv, как показано ниже.


Теперь я сохраняю результат (имена) в csv файл, но он сохраняется следующим образом :

enter image description here

Мне нужно сохранить его следующим образом:

enter image description here

Пожалуйста, дайте мне знать, если будут какие-либо обновления.

for line in lines:
    match = re.findall("^Your Name:[\S]*(.*)", line)

if len(match) > 0:
    name += ",".join(match)

Это просто странно. Откуда вы это скопировали и вставили?

Ваш пример предполагает, что совпадение нуля или более непробельных символов всегда будет сводиться к "мы сопоставляем ноль таких символов". Поэтому удалите это. И замените его на \s+, чтобы пропустить (приблизительно один?) символов ПРОБЕЛА после двоеточия :.

Обратите внимание, что символы запятой отсутствуют , не появляются в выводе. Поэтому .findall() не имеет смысла и отвлекает тех, кто сопровождает этого кода. Говорите то, что имеете в виду, и подразумевайте то, что вы говорите. Замените его на простым .search().

Идентификатор name выбран неудачно, поскольку он, очевидно, должен накапливать все имена, найденные в файле.

Проверка len(match), кажется, приглашает диагностика "'NoneType' has no len()".

Складывая все это вместе, мы получаем:

names = []
for line in lines:
    match = re.search(r'^Your Name:\s+(.*)', line)

    if match:
        names.append(match.group(1))

print(','.join(names))

или, если хотите, используйте '\n'.join(names), чтобы поместить их на отдельные строки.


Регулярное выражение - потрясающий инструмент. Но эта проблема достаточно проста что вы можете предпочесть простой манипуляции со строками.

    your_name = 'Your Name: '
    if line.startswith(your_name):
        name = line.removeprefix(your_name)
        names.append(name)
Вернуться на верх