You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式移除逗号分隔列表中每个条目的后缀文本?

解决方案:用正则提取并保留指定前缀

当然可以!这是正则表达式非常擅长的文本精简场景,我会给你讲清楚怎么实现,还会拆解每个部分的含义,帮你快速理解~

核心思路

你的需求是:每个条目以固定格式的5字符前缀(##-NX,两位数字加-NX)开头,后面跟着任意文本,我们要只保留前缀,去掉后面的内容直到下一个逗号或字符串结尾。

正则匹配与替换方案

匹配模式

(\d{2}-NX)\s.*?(?=,|$)

替换内容

$1

逐段解释(新手友好版)

我把正则拆成几个部分,帮你看懂每个符号的作用:

  • (\d{2}-NX):这是捕获组,专门用来锁定我们要保留的内容。\d{2}匹配两位数字,-NX是固定的后缀,整个组合刚好匹配你的5字符前缀,括号能把这部分内容存起来,后面替换时用$1调用。
  • \s:匹配前缀后面的空格(对应你例子里01-NX和sometext之间的空格)。如果有的条目前缀和文本之间没有空格,把这里改成\s?(?表示匹配0次或1次空格)就能兼容两种情况。
  • .*?:非贪婪匹配任意字符(除了换行)。用*?而不是*是为了避免“贪心”地匹配到后面所有内容,它会在遇到下一个停止条件时立刻停下。
  • (?=,|$):正向预查,相当于一个“停止信号”——告诉正则,当遇到逗号(下一个条目的开头)或者字符串结尾时,就停止当前条目的匹配。

实际使用示例

我给你举两个常见编程语言的实现例子,你可以直接套用:

Python 示例

import re

original_string = "01-NX sometext, 02-NX morertext, 09-NX othertext, 12-NX etc..."
processed_string = re.sub(r'(\d{2}-NX)\s.*?(?=,|$)', r'\1', original_string)

print(processed_string)
# 输出结果:01-NX, 02-NX, 09-NX, 12-NX...

JavaScript 示例

const originalStr = "01-NX sometext, 02-NX morertext, 09-NX othertext, 12-NX etc...";
const processedStr = originalStr.replace(/(\d{2}-NX)\s.*?(?=,|$)/g, "$1");

console.log(processedStr);
// 输出结果:01-NX, 02-NX, 09-NX, 12-NX...

额外提示

如果你的条目里可能包含换行符,可以在正则里加上re.DOTALL(Python)或者在模式末尾加s(JavaScript),让.*?也能匹配换行。

内容的提问来源于stack exchange,提问作者Scott Lang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 10:45:28