我正在学习Python字符串操作并尝试将分隔文本转换为变量。
即。 "On Tap: 20 | Bottles: 957 | Cans: 139"
此字符串应将值20分配给Tap,将957分配给Bottles,将139分配给Cans。此字符串不固定且可能不同(例如3个值或0,也可以互换Tap,Bottles或Cans的位置)。
到目前为止,我已经开发了这个:
import re
strEx = "On Tap: 20 | Bottles: 957 | Cans: 139"
barServingText = strEx.split('|')
print(barServingText)
for i in barServingText:
print (i)
if i.find("Bottles"):
print("Found Bottles")
Bottles = re.sub('[^0-9]*','',i)
print(Bottles)
elif i.find("Cans"):
print("Found Cans")
Cans = re.sub('[^0-9]*','',i)
print(Cans)
elif i.find("Tap"):
print("Found Tap")
Tap = re.sub('[^0-9]*','',i)
print(Tap)
然而,它不符合我的期望,并且每次都重新分配瓶子的价值。
输出:
['On Tap: 20 ', ' Bottles: 957 ', ' Cans: 139']
On Tap: 20
Found Bottles
20
Bottles: 957
Found Bottles
957
Cans: 139
Found Bottles
139
我已经包含了许多print
语句来调试代码。我的目的只是为适当的变量赋值。
答案 0 :(得分:3)
find
在找不到字符串时返回-1
,-1
被视为True
(bool(-1)
给True
),所以你必须使用find(...) != -1
import re
strEx = "On Tap: 20 | Bottles: 957 | Cans: 139"
barServingText = strEx.split('|')
print(barServingText)
for i in barServingText:
print (i)
if i.find("Bottles") != -1:
print("Found Bottles")
Bottles = re.sub('[^0-9]*','',i)
print(Bottles)
elif i.find("Cans") != -1:
print("Found Cans")
Cans = re.sub('[^0-9]*','',i)
print(Cans)
elif i.find("Tap") != -1:
print("Found Tap")
Tap = re.sub('[^0-9]*','',i)
print(Tap)
BTW:使用您的数据,您不需要re
。您可以使用split
(和strip
)
Bottles = i.split(':')[1].strip()
Cans = i.split(':')[1].strip()
Tap = i.split(':')[1].strip()
答案 1 :(得分:1)
str.find()
方法用于返回字符串中文本的位置。如果找不到文本,则返回整数-1。在Python中,为了检查字符串是否包含另一个,您可能希望使用语法if subString in string:
,如下所示:
...
if "Bottles" in i:
print("Found Bottles")
...
正如官方文件所述:
对于字符串和字节类型,
x in y
仅当x
是y
的子字符串时才有效。等效测试是y.find(x) != -1
因此,根据您的首选编码风格和/或特定需求,您可以选择“x in y
”或“y.find(x) != -1
”
答案 2 :(得分:1)
以下正则表达式应为您创建键值对:
r"((.*?):(.*?)(\||$))"
我认为以下方法更适合,因为它会使其动态并且可以拥有超过这3个变量
import re
regex = ur"((.*?):(.*?)(\||$))"
test_str = u"On Tap: 20 | Bottles: 957 | Cans: 139"
matches = re.finditer(regex, test_str)
for matchNum, match in enumerate(matches):
s=match.group(2).strip().split(' ')[-1]+"="+match.group(3).strip()
print(s)
exec(s)
print(Tap)
print(Bottles)
print(Cans)