Формат регулярного выражения, чтобы найти определенную строку из списка - PullRequest
2 голосов
/ 20 марта 2019

Это не для домашней работы!

Здравствуйте,

Просто быстрый вопрос о Regex форматировании.

У меня есть списокразные курсы.

L = ['CI101', 'CS164', 'ENGL101', 'I-', 'III-', 'MATH116', 'PSY101']

Я искал формат, чтобы найти все слова, которые начинаются с I, или II, или III.Вот что я сделал.(Я использовал python fyi)

for course in L:
    if re.search("(I?II?III?)*", course):
        L.pop()

Я узнал, что ? в регулярных выражениях означает необязательный.Так что я думал сделать I, II и III необязательными и *, чтобы включить все, что следует.Тем не менее, похоже, что это не работает, как я хотел.Какой будет лучший рабочий формат?

Спасибо

Ответы [ 2 ]

3 голосов
/ 20 марта 2019

Вот регулярное выражение, которое вы должны использовать:

^I{1,3}.*$

нажмите здесь, чтобы увидеть пример

^ означает заголовок строки.I{1,3} означает повтор I от 1 до 3 раз..* означает любые другие строки.$ означает хвост линии.Таким образом, это регулярное выражение будет соответствовать всем словам, которые начинаются с I, II или III.

Посмотрите на свое регулярное выражение, во-первых, у вас нет знака ^, поэтомубудет соответствовать I где угодно.Во-вторых, ? повлияет только на предыдущий символ, поэтому первый I является необязательным, а второй I - нет, тогда третий I является необязательным, четвертый и пятый I - нет,шестой I не является обязательным.Наконец, вы используете скобки с *, это означает, что выражение в скобках будет повторяться много раз, включая 0 раз.Таким образом, оно будет соответствовать 0 I или, по крайней мере, 3 I.

вашему регулярному выражению

1 голос
/ 20 марта 2019

Вместо search() вы можете использовать функцию match(), которая соответствует шаблону в начале строки:

import re

l = ['CI101', 'CS164', 'ENGL101', 'I-', 'III-', 'MATH116', 'PSY101']

pattern = re.compile(r'I{1,3}')

[i for i in l if not pattern.match(i)]
# ['CI101', 'CS164', 'ENGL101', 'MATH116', 'PSY101']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...