首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >匹配字符串中除正则表达式之外的所有内容

匹配字符串中除正则表达式之外的所有内容
EN

Stack Overflow用户
提问于 2021-07-04 10:29:37
回答 2查看 61关注 0票数 2

我正在尝试编写一个正则表达式,它将匹配两个特定单词之间的所有内容,但也将丢弃特定模式的所有子字符串。

例如,如果给定的句子是:'START this is *9-11* a dummy 3-*1句子END',我想写一个正则表达式来得到答案:这是一个虚拟句子

如果我只想匹配单词START和END之间的所有内容,我可以编写正则表达式: START(.*?)END

但我也希望丢弃以数字、连字符和*的任意组合开头并以结尾的所有模式。

我该怎么做?

EN

回答 2

Stack Overflow用户

发布于 2021-07-04 10:53:46

regex将服务于您的目的

代码语言:javascript
运行
复制
/START|(\[[^]]*\]\s)|END/g

可以在regex101链接上看到演示。

解释-

除了[

  • last is

  • as it
    1. as it
    2. []之间的任何内容
票数 1
EN

Stack Overflow用户

发布于 2021-07-04 21:33:08

按照注释中的建议,您可以使用两步法。

从头到尾的第一个匹配,其间没有出现START或END。

代码语言:javascript
运行
复制
\bSTART\b((?:(?!\b(?:START|END)\b).)*)\bEND\b

请参阅regex demo

然后使用重复的character class删除包含允许的字符的方括号。

代码语言:javascript
运行
复制
\[[0-9*-]+]

由于替换,可能会出现双空间间隙。然后,您可以将所有2个或更多空格替换为一个空格,并修剪字符串以删除整个字符串的前导和训练空格字符。

没有列出语言,例如使用Javascript:

代码语言:javascript
运行
复制
const regex = /\bSTART\b((?:(?!\b(?:START|END)\b).)*)\bEND\b/g;
const s = "START this is [*9-11*0] a dummy [3-*1] sentence END";
Array.from(
  s.matchAll(regex), m => console.log(
    m[1].replace(/\[[0-9*-]+]/g, '').replace(/\s{2}/g, ' ').trim()
  )
);

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

https://stackoverflow.com/questions/68241226

复制
相关文章

相似问题

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