如何使用可变长度找到带有字符串模式的匹配行

问题描述 投票:1回答:2

使用Notepad ++和regex,我需要找到一个大(3MB)文本文件中的所有行,其中包含如下模式: “找不到仓库商店:12和邮政编码55555”

仓库代码后面的数字:可以是1位或2位数,而邮政编码后面的数字总是一个空格,后跟5个字符的邮政编码。

我想选择包含“warehouseid:__和zipcode _____”的所有子字符串,所以我最终会得到一个像这样的子字符串列表: “仓库:14和邮政编码44444” “仓库:5和邮政编码44444” “仓库:44和邮政编码44444” “仓库:44和邮政编码44444” “仓库:44和邮政编码44444”

我开始的是这样的: ^(warehouseid:)。$

但现在我要选择以“仓库”开头的下n个字符

regex notepad++
2个回答
1
投票

你可以用

Find What:    .*(warehouseid:\h*\d{1,2})\b.*(zipcode\h*\d{5})\b.*|(.+)\R*
Replace With: (?{1}$1 and $2:)

细节

  • .* - 除了换行符之外的任何0 +字符,尽可能多
  • (warehouseid:\h*\d{1,2})
  • \b - 字边界,以确保只有1或2位数被捕获到第1组
  • .* - 除了换行符之外的任何0 +字符,尽可能多
  • (zipcode\h*\d{5})
  • \b - 字边界,以确保只有5位数被捕获到第2组
  • .* - 除了换行符之外的任何0 +字符,尽可能多
  • | - 或
  • (.+)\R* - 不符合标准的整行。

(?{1}$1 and $2:)替换模式取代了Group 1,and和Group 2值,或者只删除了与标准不匹配的整行。

enter image description here


0
投票

这找到整行并给你“仓库:__和zipcode _____”作为一个组(选择):

"Could not find store with (warehouseid: \d{1,2} and zipcode \d{5})"

检查解释here

如果您想将仓库“XX”和邮政编码“XXXXX”作为组,则使用@WiktorStribiżew解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.