Извлечь слова из строки перед новой строкой - PullRequest
0 голосов
/ 20 июня 2020

Недавно я задал вопрос, как извлекать слова из строки перед числом, чтобы помочь мне отсортировать некоторые данные. Это прекрасно работает до тех пор, пока не будет номера впереди, а только новая строка.

Это было сделано с помощью codenewb ie

import re

strings = '''
Hi my name is hazza 50 test test test

Hi hazza 60 test test test

hazza 50 test test test
'''

for s in strings.split('\n'):
    if s != '':
        print(re.findall('(.+?)\d',s)[0])

Это дает

Hi my name is hazza 
Hi hazza 
hazza 

Что идеально, но не работает, если перед строкой нет номера, но есть новая строка

import re

strings = '''
Hi my name is hazza 50 test test test

Hi hazza 60 test test test

hazza 50 test test test

hazza hazza test test test
'''

for s in strings.split('\n'):
    if s != '':
        print(re.findall('(.+?)\d',s)[0])

Мне нужно, чтобы он дал мне

Hi my name is hazza 
Hi hazza 
hazza 
hazza hazza

Я пробовал

import re

strings = '''
Hi my name is hazza 50 test test test

Hi hazza 60 test test test

hazza 50 test test test

hazza hazza
test test test
'''

    while True:
            try:
                for s in strings.split('\n'):
                    if s != '':
                        print(re.findall('(.+?)\d',s)[0])
            except IndexError:
                print(s.split('/n'))

Но не совсем уверен, где вставить разрыв и есть ли лучший способ

Любая помощь будет принята с благодарностью

Изменить:

У меня есть эти жалы например,

Hi my name is hazza 50 test test test

Hi hazza 60 test test test

hazza 50 test test test

hazza hazza
test test test

Код, созданный codenewb ie, отлично работает для первых трех строк, но не для последней.

Мне нужно, чтобы последняя выглядела как

Hi my name is hazza 
Hi hazza 
hazza 
hazza hazza

1 Ответ

0 голосов
/ 20 июня 2020

Вы можете использовать re.match () [^\d]* для сопоставления любых символов, отличных от di git:

import re

strings = '''
Hi my name is hazza 50 test test test

Hi hazza 60 test test test

hazza 50 test test test

hazza hazza test test test
'''

for s in strings.splitlines():
    if s != '':
        print(re.match(r'[^\d]*',s)[0])

Выводит:

Hi my name is hazza 
Hi hazza 
hazza 
hazza hazza test test test

РЕДАКТИРОВАТЬ: На основании комментариев новая версия:

import re

strings = '''Hi my name is hazza 50 test test test

Hi hazza 60 test test test

hazza 50 test test test

hazza hazza
test test test
'''

for s in re.findall(r'(.*?)(?:\n\n|\n$)', strings, flags=re.S):
    print(re.match(r'(.*?)(?=\d|\n)', s)[0])

Печатает:

Hi my name is hazza 
Hi hazza 
hazza 
hazza hazza
...