所以我正在使用Magtek USB读卡器,该读卡器将读取卡信息,
截至目前,我可以刷卡,并且可以获得一长串信息,这些信息将进入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 之后使用格式
到目前为止,当我尝试执行此操作时,仍无法重用“ ^”
任何了解如何将文本字符串拆分为单个变量的人:
卡号
名字
姓氏
到期日期
答案 0 :(得分:1)
正则表达式将为此工作。我没有捕获所有内容,因为您没有详细说明这是什么,但这是捕获名称的示例:
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>.+)\^
这个问题也可能使您感兴趣:两次发现一些东西:Finding multiple occurrences of a string within a string in Python
答案 1 :(得分:0)
如果发现正则表达式很困难,则可以将问题分成较小的部分,然后一次进行攻击:
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:])