Python регулярное выражение выборочных чисел с re.findall (r '()', строка) - PullRequest
0 голосов
/ 10 апреля 2020

Мне нужно извлечь только текстовую часть и вспомогательный номер в конце строк, из:

'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor?::enim',
'9. Ut enim ad minima veniam, quis nostrum exercitationem.2',
'. . . . . 9.1 dolore magnam aliquam quaerat',
'. . . . . 9.1 ed quia consequuntur magni.1',
'. . . . . 9.2 Quis autem vel eum iure reprehenderit.2'

вот так:

'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor?::enim',
'Ut enim ad minima veniam, quis nostrum exercitationem.2',
'dolore magnam aliquam quaerat',
'ed quia consequuntur magni.1',
'Quis autem vel eum iure reprehenderit.2'

Возможно ли это сделать с одиночный re.findall (r '()', item) в python регулярное выражение? Похоже, я не могу «отделить» числа в начале строки от номера в конце строки.

Я пробовал, например, с помощью следующего кода:

string ='. . . . . 9.2 Quis autem vel eum iure reprehenderit.2' 
string = re.findall(r'([a-öA-Ö0-9/:._]+)',string)
string = ' '.join( list(filter(lambda x: x != '.', string)))

Это дает:

'9.2 Quis autem vel eum iure reprehenderit.2'

Но это не удаляет переднее число, является сложным, а также разбивает исходный текст и объединяется с пробелом между ними. Я хотел бы обрезать строку там, где начинается текст, и на самом деле не хочу прикасаться к исходной части текста, например, между словами иногда могут быть два пробела, но они должны быть сохранены как есть.

Ответы [ 3 ]

1 голос
/ 10 апреля 2020

Попробуйте использовать более сложное регулярное выражение, например:

import re

expression = re.compile(r'(.*?[0-9].+? )*(.+)')

# this is a list of tuples, and you are always interested in the last match
results = expression.findall('<string>')[-1][-1]
1 голос
/ 10 апреля 2020

Может быть ...

import re

text = """
'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor?::enim',
'9. Ut enim ad minima veniam, quis nostrum exercitationem.2',
'. . . . . 9.1 dolore magnam aliquam quaerat',
'. . . . . 9.1 ed quia consequuntur magni.1',
'. . . . . 9.2 Quis autem vel eum iure reprehenderit.2'
"""

pattern = re.compile(r".*?(\d\.\d? )")

print(pattern.sub(r"'", text))

Выходы:

'Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor?::enim',
'Ut enim ad minima veniam, quis nostrum exercitationem.2',
'dolore magnam aliquam quaerat',
'ed quia consequuntur magni.1',
'Quis autem vel eum iure reprehenderit.2'
1 голос
/ 10 апреля 2020

Вы можете преобразовать подстроки, которые соответствуют регулярному выражению (с установленным флагом безразличного регистра)

(?<=^')[^a-z]+

, в пустые строки.

Демо

Регулярное выражение гласит: «соответствует одному или нескольким символам, отличным от букв, следующих за одинарной кавычкой в ​​начале строки», (?<=^') означает положительный взгляд за .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...