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

python如何找到字符串中数字的精确匹配,python,Python,如何匹配字符串列表中的整数 我的代码如下所示: test_number = 123 # some number 1-399 lst = ["XXXXXXX-123_xxxxxxx", "XXXXXXX-399_xxxxxxx", ...] # lst[0] should match, lst[1] should not 我需要做的是,如果test\u编号出现在lst中的任何字符串中,我需要对该字符串执行操作 我是否使用re.search?但是search比较字符串,我的测试号是整

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

我的代码如下所示:

test_number = 123 # some number 1-399
lst = ["XXXXXXX-123_xxxxxxx",
       "XXXXXXX-399_xxxxxxx", ...]
# lst[0] should match, lst[1] should not
我需要做的是,如果
test\u编号
出现在
lst
中的任何字符串中,我需要对该字符串执行操作

我是否使用
re.search
?但是
search
比较字符串,我的测试号是整数

import re
test_number = 123
str1="XXjdasjXX-123_dsajdfs"
x= re.search("{}".format(test_number),str1).group()
print (x)
输出:

>>> 
123
>>> 
使用
搜索
查找匹配项,并
格式化
放置我们的号码。和
group()
将其从
object
转换为str

如果要将其用作整数,请在打印之前添加
x=int(x)
,然后将其转换为整数

输出:

>>> 
123
>>> 
使用
搜索
查找匹配项,并
格式化
放置我们的号码。和
group()
将其从
object
转换为str


如果要将其用作整数,请在打印之前添加
x=int(x)
,然后将其转换为整数

如果您知道它的格式将完全如此,请尝试以下方法,而不是使用正则表达式:

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

但是,如果您不确定紧靠目标值的是
-
,则应使用正则表达式。不幸的是,在这种情况下,很难判断您的模式应该是什么,因为我不知道edge的情况。

如果您知道它将以这种方式格式化,请尝试以下方法,而不是使用正则表达式:

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

但是,如果您不确定紧靠目标值的是
-
,则应使用正则表达式。不幸的是,在这种情况下,很难判断您的模式应该是什么,因为我不知道边缘的情况。

使用与Adam Smith相同的假设(您的字符串的格式将与此完全相同),您应该在搜索号码之前去掉字符串的开头和结尾:

test_number = 123
for elem in your_list:
    if str(test_number) == elem[8:-8]:
        # match - do something

使用与Adam Smith相同的假设(您的字符串格式将与此完全相同),在搜索您的号码之前,您只需去掉字符串的开头和结尾:

test_number = 123
for elem in your_list:
    if str(test_number) == elem[8:-8]:
        # match - do something

你可以这样做

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

你可以这样做

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


请注意,这也与
str1=XX123sjXX-999\u dsajdfs
匹配。他的示例不是这样的,只包含一个数字。他的示例列出了
-
之前和
之后的所有未知项。假设测试编号与字符串中的其他位置匹配时可能存在误报是完全合理的。还要注意的是,您的代码相当于str1
中的
str(test_number),但速度要慢得多:(。您也没有考虑到
str1
应该是字符串列表的事实。Ugh:(请注意,这也与
str1=XX123sjXX-999\u dsajdfs
匹配。他的示例不是这样的,只包含一个数字。他的示例列出了
-
之前和
-
之后的所有未知项。如果测试数字与字符串中的其他位置匹配,则可能存在误报。注意另外,您的代码相当于str1中的
str(test_number),但速度要慢得多:(。您也没有考虑到
str1
应该是字符串列表的事实。呃:(OP:我编辑了你的帖子,试图在不添加任何附加信息的情况下澄清问题。你能确认我正确地解释了你的问题,还是回滚编辑并澄清你自己吗?OP:我编辑了你的帖子,试图在不添加任何附加信息的情况下澄清问题。你能确认我已经更正了吗我解释了你的问题,或者回滚编辑并自己澄清?字符串切片比字符串合成和成员资格测试快吗?我可以想象,如果一些“噪音”听起来像
-####(uu)
的话,这会稍微安全一些,但是…@AdamSmith:我没有测试过,但我很确定它会快得多(但只有在大得多的测试用例中)在这个测试中,任何速度差异都可以忽略不计。
timeit
同意你的观点,在1000000次运行中节省了4ms:)@AdamSmith:你比我快了很多(现在完成我的测试毫无意义)!@AdamSmith:反正我的测试已经完成了……这个方法根本没有比
快多少
。即使有更大的测试用例,它也只是稍微快一点(可能是10%)。我认为原因是Python的编译器基本上把字符串串联变成了一个常量(因为它从不改变),因此不必每次通过循环都重新评估它。字符串切片比字符串合成和成员资格测试快吗?我可以想象,如果一些“噪音”听起来像
-####(uu)
但是…@AdamSmith:我没有测试,但我很确定它会快得多(但只有在大得多的测试用例中)在这个测试中,任何速度差异都可以忽略不计。
timeit
同意你的观点,在1000000次运行中节省了4ms:)@AdamSmith:你比我快了很多(现在完成我的测试毫无意义)!@AdamSmith:反正我的测试已经完成了……这个方法根本没有比
快多少
。即使有更大的测试用例,它也只是稍微快一点(可能是10%)。我认为原因是Python的编译器基本上把字符串串联变成了一个常量(因为它从不改变),因此不必每次通过循环都重新评估它。您的测试也会出现误报。如果
value=-307_XXX-2-xxxxxxx
,您的测试将匹配,但它不应该匹配。噪声“听起来”像
-####
,这似乎是不太可能的,我并不担心,但这是可能的,是的!)不幸的是,无法猜测OP数据的格式。您的测试也会出现误报。如果
value=-307_XXX-2-xxxxxxx
,您的测试将匹配,但它不应该匹配。噪音“听起来”像我做的那样似乎是不太可能的