Поэтому я использую USB-устройство Magtek, которое будет считывать информацию о карте,
На данный момент я могу провести карточку, и я получаю длинную строку информации, которая входит в текстовое поле Tkinter Entry, которое выглядит так:
%B8954756016548963^LAST/FIRST INITIAL^180912345678912345678901234?;8954756016548963=180912345678912345678901234?
Все данные были рандомизированы, но формат
У меня есть кнопка tkinter (она получает текст из окна ввода в том формате, который я включил выше, и запускает это)
def printCD(self):
print(self.carddata.get())
self.card_data_get = self.carddata.get()
self.creditnumber =
self.card_data_get[self.card_data_get.find("B")+1:
self.card_data_get.find("^")]
print(self.creditnumber)
print(self.card_data_get.count("^"))
Эти результаты:
%B8954756016548963^LAST/FIRST INITIAL^180912345678912345678901234?;8954756016548963=180912345678912345678901234?
8954756016548963
Это не дает никаких проблем, но если бы я хотел получить следующие две переменные firstname и lastname
Мне нужно будет повторно использовать self.variable.find("^"), потому что в формате, который он использовал до LAST и после INITIAL
До сих пор, когда я пытался это сделать, он не смог повторно использовать "^"
Любые участники о том, как я могу разделить эту строку текста на отдельные переменные:
Номер карты
Имя
Фамилия
Дата окончания срока
Regex будет работать для этого. Я не захватил все, потому что вы не детализировали, что, но вот пример захвата имени:
import re
data = "%B8954756016548963^LAST/FIRST INITIAL^180912345678912345678901234?;8954756016548963=180912345678912345678901234?"
matches = re.search(r"\^(?P<name>.+)\^", data)
print(matches.group('name'))
# LAST/FIRST INITIAL
Если вы не знакомы с регулярным выражением, вот способ проверки соответствия шаблонов: https://regex101.com/r/lAARCP/1 и учебник по интро: https://regexone.com/
Но в основном, я ищу (одно или несколько из чего-либо с. + Между двумя моркови, ^).
На самом деле, поскольку вы упомянули о первом и последнем отдельном, вы будете использовать это регулярное выражение:
\^(?P<last>.+)/(?P<first>.+)\^
Этот вопрос может также заинтересовать вас в поиске чего-то дважды: Поиск нескольких вхождений строки в строке в Python
Если вы находите сложное регулярное выражение, вы можете разделить проблему на более мелкие части и атаковать по одному за раз:
data = '%B8954756016548963^LAST/FIRST INITIAL^180912345678912345678901234?;8954756016548963=180912345678912345678901234?'
pieces = data.split('^') # Divide in pieces, one of which contains name
for piece in pieces:
if '/' in piece:
last, the_rest = piece.split('/')
first, initial = the_rest.split()
print('Name:', first, initial, last)
elif piece.startswith('%B'):
print('Card no:', piece[2:])