gpt4 book ai didi

python - 字符串上的正则表达式以匹配字符序列

转载 作者:太空宇宙 更新时间:2023-11-03 15:45:28 25 4
gpt4 key购买 nike

设置

我有大量产品图片,其中一些图片的文件名中包含产品的 SKU。

我需要检查文件名是否包含产品的 SKU。

所有 SKU 均由 5 个数字、一个下划线和 2 个数字组成;例如'10008_01''23521_18'


我的代码

我正在使用我找到的正则表达式设置 here :

for image in product_image_list:

if re.match(r"^[0-9]{5}$" + '_' + r"^[0-9]{2}$", image):
print('Match: '+ image)
else:
print("NO match: " + image)

在哪里,

  • image 是图像文件的名称,例如'FINAL 10008_01_angle.jpeg''FINAL 10008_detail_B.jpeg'
  • product_image_list 是包含图像的列表。

问题

上面的代码不匹配,它只产生'No match'

如何让它正常工作? IE。我如何获得:

'匹配:最终 10008_01_angle.jpeg'
'不匹配:FINAL 10008_detail_B.jpeg'

最佳答案

^[0-9]{5}$_^[0-9]{2}$$ 以来,模式将永远不会匹配任何字符串里面的 anchor 需要字符串的结尾,但是有更多的字符要匹配( _ ,然后是字符串的开头,2 位数字和字符串的结尾)。

您需要修复正则表达式模式以匹配 <5-digit>-<2-digit>没有封闭数字的子字符串,并使用带有 re.search 的模式方法(因为 re.match 只搜索字符串开头的匹配项):

if re.search(r'(?<!\d)[0-9]{5}_[0-9]{2}(?!\d)', image):

在这里,

  • (?<!\d) - (负向后视)匹配字符串中没有紧跟数字的位置
  • [0-9]{5} - 5 位数字
  • _ - 下划线
  • [0-9]{2} - 2 位数字
  • (?!\d) -(负前瞻意义)当前位置的右边不能有数字。

参见 this regex demo .

打印匹配使用

for image in product_image_list:
m = re.search(r'(?<!\d)[0-9]{5}_[0-9]{2}(?!\d)', image)
if m:
print('Matched SKU: {}'.format(m.group()))
else:
print("NO match found in '{}'.".format(image))

要匹配多次出现,请使用 re.findall :

re.findall(r'(?<!\d)[0-9]{5}_[0-9]{2}(?!\d)', image)

关于python - 字符串上的正则表达式以匹配字符序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50172878/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com