Удалите указанные c подстроки, содержащие целые числа в Python - PullRequest
1 голос
/ 05 мая 2020

Для небольшого проекта я пытаюсь преобразовать строку игрового процесса в шахматы в список шахматных ходов. Данная строка может выглядеть следующим образом: s="1. e4 e5 2. Nf3 Nf6 3. Nc3 d6 4. Bc4 h6 5. d3 Be7 6. Be3 Nc6".

Теперь мне интересно, какой наиболее эффективный способ избавиться от целого числа, обозначающего, в какой паре ходов мы находимся в игре (например, "1."), но не от целых чисел, обозначающих в какую координату поля переместилась шахматная фигура (например, "e4").

Мой текущий подход выглядит следующим образом:

s = s.replace('.', '').split(" ")
s = [e for e in s if not e.isdigit()]

В случае, если я не хочу преобразовывать в список, а просто удаляю указанные c части, как указано выше, как бы я сделать это эффективно? Могу ли я использовать для этого регулярное выражение из re?

Ответы [ 2 ]

2 голосов
/ 05 мая 2020

Вы можете использовать endswith для проверки наличия подстрок, оканчивающихся на ..

s="1. e4 e5 2. Nf3 Nf6 3. Nc3 d6 4. Bc4 h6 5. d3 Be7 6. Be3 Nc6"

s = " ".join([substr for substr in s.split() if not substr.endswith('.')])

Вывод: 'e4 e5 Nf3 Nf6 Nc3 d6 Bc4 h6 d3 Be7 Be3 Nc6'

1 голос
/ 05 мая 2020

Вы можете использовать для этого re.split следующим образом:

import re
s = "1. e4 e5 2. Nf3 Nf6 3. Nc3 d6 4. Bc4 h6 5. d3 Be7 6. Be3 Nc6"
moves = re.split(r'\s*\d+\.\s*', s)
print(moves)

Вывод:

['', 'e4 e5', 'Nf3 Nf6', 'Nc3 d6', 'Bc4 h6', 'd3 Be7', 'Be3 Nc6']

Обратите внимание, что я использовал так называемую необработанную строку (или r-строку) , поэтому мне не нужно экранировать \, я использовал шаблон, который можно было бы прочитать как:

  • 0 или более пробелов
  • 1 или более цифр (0-9)
  • . (это необходимо экранировать, поскольку . имеет особое значение в шаблонах)
  • 0 или более пробелов

Если вы предпочитаете интерактивное объяснение, вы можете вставить этот шаблон в regex101.com . Обратите внимание, что в начале ходов стоит пустой str, но его можно легко удалить с помощью нарезки списка (например, moves = moves[1:])

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