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

2024-10-02 22:24:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个问题,“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))

Tags: 字符串namein列表文件名page字符temp
2条回答

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

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

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

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

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

相关问题 更多 >