python如何在字符串中找到数字的精确匹配

时间:2015-01-15 02:28:52

标签: python

如何匹配字符串列表中的整数?

我的代码如下:

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是整数。

4 个答案:

答案 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 ####