我正在尝试编写一个正则表达式,它将匹配两个特定单词之间的所有内容,但也将丢弃特定模式的所有子字符串。
例如,如果给定的句子是:'START this is *9-11* a dummy 3-*1句子END',我想写一个正则表达式来得到答案:这是一个虚拟句子
如果我只想匹配单词START和END之间的所有内容,我可以编写正则表达式: START(.*?)END
但我也希望丢弃以数字、连字符和*的任意组合开头并以结尾的所有模式。
我该怎么做?
发布于 2021-07-04 10:53:46
发布于 2021-07-04 21:33:08
按照注释中的建议,您可以使用两步法。
从头到尾的第一个匹配,其间没有出现START或END。
\bSTART\b((?:(?!\b(?:START|END)\b).)*)\bEND\b
请参阅regex demo。
然后使用重复的character class删除包含允许的字符的方括号。
\[[0-9*-]+]
由于替换,可能会出现双空间间隙。然后,您可以将所有2个或更多空格替换为一个空格,并修剪字符串以删除整个字符串的前导和训练空格字符。
没有列出语言,例如使用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()
)
);
https://stackoverflow.com/questions/68241226
复制相似问题