如何使用可变长度

时间:2018-02-28 21:21:42

标签: regex notepad++

使用Notepad ++和regex,我需要找到一个大型(3MB)文本文件中的所有行,其格式如下:
“无法找到仓库存储:12和邮政编码55555”

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

我想选择包含“warehouseid:__和zipcode _____”的所有子字符串,所以我最终会得到一个像这样的子字符串列表:

“仓库:14和邮政编码44444”
“仓库:5和邮政编码44444”
“仓库:44和邮政编码44444”
“仓库:44和邮政编码44444”
“仓库:44和邮政编码44444”

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

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

2 个答案:

答案 0 :(得分: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:)替换模式取代了第1组,and和第2组值,或者只删除了与条件不匹配的整行。

enter image description here

答案 1 :(得分:0)

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

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

检查说明here

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