Python 搜索完整的子字符串是否在字符串中而不是其一部分

Python 搜索完整的子字符串是否在字符串中而不是其一部分,python,Python,我有一个问题,“in”运算符没有搜索字符串的完整子字符串,但如果字符串中有任何连续字符,则返回true 例如,对于给定的列表定义的图形页面名称列表['118-SB710'、'66kV FIH GIS'、'MCC800'、'MCC849'],我正在搜索文件夹中的所有文件名,并比较列表内容是否是文件名的一部分 其中一个文件名是“415V FI MCC849进线”。问题是,尽管列表中有MCC849,“MCC”也在列表中,因此存在文件混淆和创建重复文件等情况 换句话说,文件名是C:\temp\MCC80

我有一个问题,“in”运算符没有搜索字符串的完整子字符串,但如果字符串中有任何连续字符,则返回true

例如,对于给定的列表定义的图形页面名称列表['118-SB710'、'66kV FIH GIS'、'MCC800'、'MCC849'],我正在搜索文件夹中的所有文件名,并比较列表内容是否是文件名的一部分

其中一个文件名是“415V FI MCC849进线”。问题是,尽管列表中有MCC849,“MCC”也在列表中,因此存在文件混淆和创建重复文件等情况

换句话说,文件名是
C:\temp\MCC800\415V-FI-MCC849 Incomer
,但我希望它是
C:\temp\MCC849\415V-FI-MCC849 Incomer

我想搜索整个单词,而不仅仅是列表中的连续字符

任何帮助都将不胜感激

代码如下:

Page_name = '415V FI MCC849 Incomer' 
graphic_pages_name_list = ['118-SB710', '66kV FIH GIS','MCC800', 'MCC849']

for name in graphic_pages_name_list:
     path = ('C:\\temp\\' + name + '\\')
     if name in Page_name:
          File_name = (path + '%s' % (Page_name))

您可以使用regex单词边界。我已将其全部加入一个大正则表达式(\bstring\b)|。。。要测试字符串,请执行以下操作:

rex = re.compile("|".join(list(map(lambda x: "(\\b"+x+"\\b)", graphic_pages_name_list)))).match(Page_name)

您可以使用regex单词边界。我已将其全部加入一个大正则表达式(\bstring\b)|。。。要测试字符串,请执行以下操作:

rex = re.compile("|".join(list(map(lambda x: "(\\b"+x+"\\b)", graphic_pages_name_list)))).match(Page_name)

您的代码已生成所需的输出:

>>> Page_name = '415V FI MCC849 Incomer'
>>> graphic_pages_name_list = ['118-SB710', '66kV FIH GIS','MCC800', 'MCC849']
>>>
>>> for name in graphic_pages_name_list:
...      path = ('C:\\temp\\' + name + '\\')
...      if name in Page_name:
...           File_name = (path + '%s' % (Page_name))
...
>>> File_name
'C:\\temp\\MCC849\\415V FI MCC849 Incomer'

找出示例代码与实际运行的代码之间的差异,并将其消除。

您的代码已生成所需的输出:

>>> Page_name = '415V FI MCC849 Incomer'
>>> graphic_pages_name_list = ['118-SB710', '66kV FIH GIS','MCC800', 'MCC849']
>>>
>>> for name in graphic_pages_name_list:
...      path = ('C:\\temp\\' + name + '\\')
...      if name in Page_name:
...           File_name = (path + '%s' % (Page_name))
...
>>> File_name
'C:\\temp\\MCC849\\415V FI MCC849 Incomer'

找出示例代码与实际运行的代码之间的差异,并将其消除。

“if(Page\u name中的名称):”=>
if(name==Page\u name):
这是您想要的吗?此人需要单词边界匹配,以便MCC与上面的MCC849不匹配。“if(Page\u name中的名称):”=>
if(name==Page\u name):
这是您想要的吗?此人需要单词边界匹配,因此MCC与上面的MCC849不匹配。