首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >删除一行中不同位置包含8-10位的数字

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

Stack Overflow用户
提问于 2019-03-23 18:49:07
回答 3查看 55关注 0票数 0

我有一张不同物品的清单。有些名字前面有8-10个数字,有些名字后面有8-10个数字,还有一些名字中没有这些数字。

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

目前,我将这些用于表达式:

代码语言:javascript
运行
复制
(?<=[\d]{8,10}) (.*)
.*?(?=[\d]{8,10})

但是如果我同时使用它们(首先使用一个,然后使用另一个),那么一些行就会变得完全空了。

我如何组合这些来做我想做的事情,或者如果这样做更好的话,可以写一个新的表达式来做我想做的事情:)

List如下所示:

代码语言:javascript
运行
复制
12345678 Book
12345678 Book
Book 12345678
Book 12345678
Cabinet 120x30x145

想要这样的结果:

代码语言:javascript
运行
复制
Book
Book
Book
Book
Cabinet 120x30x145
EN

回答 3

Stack Overflow用户

发布于 2019-03-23 19:03:28

为什么不使用下面的代码呢?检查字符串的开头或结尾是否有8个数字,然后删除它们。

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

它给出了想要的行为

票数 1
EN

Stack Overflow用户

发布于 2019-03-23 19:11:54

除了包含8-10位数字+相邻空格的数字之外,不要只对所有数字进行匹配,而是使用正则表达式将这样的数字(也是+相邻空格)替换为空字符串

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

代码语言:javascript
运行
复制
*\d{8,10} *

这就是:

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

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

请注意,您不能使用\s而不是空格,因为\s也匹配CRLF,而我们不希望这样。

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

票数 1
EN

Stack Overflow用户

发布于 2019-03-23 19:07:55

您需要使用\b meta sequence boundary

/\b0-9\s{8,10}\b/g;

代码语言:javascript
运行
复制
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);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55312915

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档