Регулярное выражение, возвращающее пустую строку

#python #regex

Вопрос:

Я работаю над проблемой регулярного выражения от coursera, и она предоставила файл данных с именами, за которым следует «: класс». Мы должны найти и вернуть имена всех студентов, у которых есть четверка. Что я сделал, так это использовал этот код регулярного выражения

 Bstudents = re.findall("(/w )*: B", grades)   #grades is the name of the variable with the names grades. 
 

Предполагается, что есть 16 учеников, у которых класс B, но вместо их имен я получаю 16 пустых строк.

вот список:

 Ronald Mayr: A
Bell Kassulke: B
Jacqueline Rupp: A 
Alexander Zeller: C
Valentina Denk: C 
Simon Loidl: B 
Elias Jovanovic: B 
Stefanie Weninger: A 
Fabian Peer: C 
Hakim Botros: B
Emilie Lorentsen: B
Herman Karlsen: C
Nathalie Delacruz: C
Casey Hartman: C
Lily Walker : A
Gerard Wang: C
Tony Mcdowell: C
Jake Wood: B
Fatemeh Akhtar: B
Kim Weston: B
Nicholas Beatty: A
Kirsten Williams: C
Vaishali Surana: C
Coby Mccormack: C
Yasmin Dar: B
Romy Donnelly: A
Viswamitra Upandhye: B
Kendrick Hilpert: A
Killian Kaufman: B
Elwood Page: B
Mukti Patel: A
Emily Lesch: C
Elodie Booker: B
Jedd Kim: A
Annabel Davies: A
Adnan Chen: B
Jonathan Berg: C
Hank Spinka: B
Agnes Schneider: C
Kimberly Green: A
Lola-Rose Coates: C
Rose Christiansen: C
Shirley Hintz: C
Hannah Bayer: B
 

Комментарии:

1. Используйте такой инструмент, как regex101.com — это позволяет вам [указать Python в качестве движка регулярных выражений и] настроить свой шаблон и увидеть в режиме реального времени, что соответствует/не соответствует.

2. Используйте шаблон "(/w ).*: B"

3. /w соответствует буквально косой черте и двойному u…

Ответ №1:

Вы можете использовать позитивный взгляд: [w ] (?=: B)

Смотрите Демонстрацию

Комментарии:

1. была ли проблема в том, что я не использовал () для идентификации «: B», или это было потому, что я использовал «*» вместо » «?

2. Почти ни один из них, смотрите ссылку.

3. Мы знаем, что перед каждым классом есть имя ученика, поэтому мы можем использовать , что означает один или несколько символов, вместо*, что означает ноль или больше