如何匹配字符串列表中的整数?
我的代码如下:
test_number = 123 # some number 1-399
lst = ["XXXXXXX-123_xxxxxxx",
"XXXXXXX-399_xxxxxxx", ...]
# lst[0] should match, lst[1] should not
我需要做的是如果test_number
中的任何字符串中出现lst
,我需要对字符串执行操作。
我使用re.search
吗?但是search
比较字符串,我的test_number是整数。
答案 0 :(得分:3)
如果您知道它的格式将完全相同,请尝试使用此算法而不是正则表达式:
test_number = 307
your_list = ["ABC109$-307_letters##", "XYZ876%-100_numbers!"]
for value in your_list:
if "-" + str(test_number) + "_" in value:
# equivalently: "-{}_".format(str(test_number))
# do something with that value
但是,如果您不确定目标值会立即围绕-
和_
,那么您应该使用正则表达式。不幸的是,在这种情况下,很难说出你的模式应该是什么,因为我不知道边缘情况。
答案 1 :(得分:1)
使用与Adam Smith相同的假设(您的字符串将被完全格式化),您应该在搜索您的号码之前删除字符串的开头和结尾:
test_number = 123
for elem in your_list:
if str(test_number) == elem[8:-8]:
# match - do something
答案 2 :(得分:0)
import re
test_number = 123
str1="XXjdasjXX-123_dsajdfs"
x= re.search("{}".format(test_number),str1).group()
print (x)
输出:
>>>
123
>>>
使用search
查找匹配项,使用format
列出我们的号码。并group()
将其从object
转换为str。
如果要将其作为整数使用,请在打印之前添加x=int(x)
,然后将其转换为整数!
答案 3 :(得分:0)
你可以做类似的事情。
def checkInt(value):
try:
int(value)
return True
except ValueError:
return False
test_num = 123
x = "XXXX-123_xxx"
y = x.split("-")
z = y[1].split("_")
if checkInt(z[0]) == True:
num = int(z[0])
if num == test_num:
####do something ####