删除一行中不同位置包含8-10位数字的数字

时间:2019-03-23 10:49:07

标签: regex

我有一系列不同的物品。他们中有些人的名字前面有8-10位数字,有些人的名字后面有8-10位数字,而另一些人的名字后面再没有这些数字。

我有两个用于删除这些数字的表达式,但是我无法将它们与|组合。 (要么)。它们各自为自己工作,但是如果我先使用第一个表达式,然后再使用第二个表达式,我将无法获得想要的结果。

我现在将这些用于表达式:

GET /_cat/indices

但是,如果我同时使用它们(第一个然后另一个),那么某些行将完全空白。

如何结合使用这些来完成我想做的事情,或者如果更好,编写一个新表达式来完成我想做的事情:)

列表如下:

(?<=[\d]{8,10}) (.*)
.*?(?=[\d]{8,10})

想要这个结果:

12345678 Book
12345678 Book
Book 12345678
Book 12345678
Cabinet 120x30x145

3 个答案:

答案 0 :(得分:1)

为什么不只使用以下内容。 检查字符串开头或结尾是否有8个数字并将其删除。

(^\d{8,10}\s*|\s*\d{8,10}$)

它提供了想要的行为

答案 1 :(得分:1)

而不是仅匹配包含以下内容的所有内容 8-10位数字+相邻的空格,请使用正则表达式替换 这样的数字(也+相邻的空格),带有空字符串

要进行匹配,请使用以下正则表达式:

*\d{8,10} *

也就是说:

  • *-一个空格和一个星号-一个空格序列(可能为空),
  • \d{8,10}-8到10位数字的序列,
  • *-另一个空格序列(可能为空)。

(如我所说)替换字符串为空。当然,您应该使用 g(全局)选项。

请注意,您不能使用\s代替空格,因为\s也会匹配 CRLF,我们不想要这个。

有关工作示例,请参见https://regex101.com/r/1hsGzT/1

答案 2 :(得分:0)

您需要使用\b meta sequence boundary

/\b[0-9\s]{8,10}\b/g;

var str = `12345678 Book
12345678 Book
Book 12345678
Book 12345678
Cabinet 120x30x145`;

var rgx = /\b[0-9\s]{8,10}\b/g;

var res = str.replace(rgx, `\n`)

console.log(res);