Python Извлечь десятичное число перед определенной подстрокой - PullRequest
4 голосов
/ 04 июля 2019

Я хочу извлечь число перед определенной подстрокой ("процентов")

Я пытался использовать функцию разделения

str1="The percentage of success for Team A is around 7.5 per cent. What about their season ?"
print(str1.split("per cent",1)[0])

Ожидаемый результат: "7.5"

Фактический результат: "The percentage of success for Team A is around 7.5"

Ответы [ 4 ]

4 голосов
/ 04 июля 2019

Вы можете использовать str.index, чтобы найти индекс, в котором происходит per cent, разрезать строку до полученного индекса, затем rstrip и split, сохраняя последний элемент из полученногосписок:

str1[:str1.index('per cent')].rstrip().split()[-1]
# '7.5'
2 голосов
/ 04 июля 2019

Для этого вы можете использовать регулярное выражение:

import re

str1="The percentage of success for Team A is around 7.5 per cent. What about their season ?"

m = re.search('([0-9.-]+) per cent', str1)
m[1]
=>7.5

Я сделал следующее: я создал регулярное выражение, которое соответствует любой комбинации цифр, тире и точки (для грубого совпадения с числом, которое возможно отрицательно)) с последующим точным текстом per cent.

Я указал число как группу, и его можно получить, открыв 1-й индекс найденного совпадения.

1 голос
/ 04 июля 2019

Я рассмотрю 4 случая: A) только положительные десятичные дроби, выраженные с использованием ., B) ЛЮБЫЕ десятичные дроби, выраженные с использованием ., C) НЕСКОЛЬКО десятичных дробей, выраженные с использованием ., D) НЕСКОЛЬКО Десятичных дробей, выраженных с использованием . ИЛИ ,.

А) Предполагая, что ваше число всегда выражается в десятичной записи

import re

results = re.findall("\d+\.\d+",str1)[0]
print(results)
#'7.5'

B) Если вытакже используйте ОТРИЦАТЕЛЬНЫЙ десятичные дроби, используйте это (более надежно):

results = re.findall(r"[-+]?\d*\.\d+|\d+",str1)

C) Если у вас НЕСКОЛЬКО десятичных дробей, используйте это:

str1="The percentage of success for Team A is around 7.5 per cent and 2.3"

results = re.findall(r"[-+]?\d*\.\d+|\d+",str1)

len(results)
#2 since it found the 2 decimals.

# Use list comprehension to store the detected decimals.
final_results = [i for i in results]
print(final_results)
#['7.5', '2.3']

D) Наконец, если десятичные дроби выражены с использованием . (точка) или , (запятая), тогда используйте супер-робаст:

str1="The percentage of success for Team A is around 7.5 per cent and 2,3"

results = re.findall(r"\d+[.,]*\d*[.,]*\d*",str1)
final_results = [i for i in results]
#['7.5', '2,3']
0 голосов
/ 04 июля 2019
str1.split('per cent')[0].split(' ')[-2]
...