Я работаю над программой, которая извлекает такие строки:

s = 'GPA: 3.4 GRE: 317 Round: Round 2 | West'
d = 'GPA: 3.7 GRE: 328 Round: Round 3 | Singapore'
a = 'GPA: undergrad: 3.68 grad: DPT 3.32 GMAT Waiver Round: Round 3'
c = 'GPA: 3.2 GMAT: 750 Round: Rolling Admissions | NY'

До сих пор я просто считывал количество раундов с помощью выражений re. Но для некоторых исключений, таких как c, мне нужно, чтобы он также возвращал «скользящие допуски». Есть ли способ получить данные между кругом и знаком трубы.

Я делал вот так:

R = re.findall('\S*Round ([a-zA-Z0-9]+)', d)
print(''.join(R))
1
Aditya 11 Май 2021 в 13:06

2 ответа

Лучший ответ

Регулярное выражение ниже получает значение между двумя разделителями Round: и |.

import re

c = 'GPA: 3.2 GMAT: 750 Round: Rolling Admissions | NY'
R = re.findall('Round\: (.*?) \|', c)
print(R) # output: 'Rolling Admissions'

Редактировать: Отметил, что есть несколько случаев, когда знак трубы недоступен. Использование следующего будет искать строку после Round: и перед | или до конца строки

import re

s = 'GPA: 3.4 GRE: 317 Round: Round 2 | West'
d = 'GPA: 3.7 GRE: 328 Round: Round 3 | Singapore'
a = 'GPA: undergrad: 3.68 grad: DPT 3.32 GMAT Waiver Round: Round 3'
c = 'GPA: 3.2 GMAT: 750 Round: Rolling Admissions | NY'

print(re.findall('Round: (.*?) ($|\|)', s)) #output: [('Round 2', '|')]
print(re.findall('Round: (.*?) ($|\|)', d)) #output: [('Round 3', '|')]
print(re.findall('Round: (.*?) ($|\|)', a)) #output: [('Round 3 ', '|')]
print(re.findall('Round: (.*?) ($|\|)', c)) #output: [('Rolling Admissions', '|')]

Вам просто нужно будет получить первый элемент, и это будет ваше запрошенное значение.

Например.

value = re.findall('Round: (.*?) ($|\|)', c)) #output: [('Rolling Admissions', '|')]
print(value[0][0]) # since the output is a tuple within a list
1
jrchew 11 Май 2021 в 11:04

Ну вот

c = 'GPA: 3.2 GMAT: 750 Round: Rolling Admissions | NY'
c.split('|')[0]
1
Vivs 11 Май 2021 в 10:18