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

如何用Perl单行命令保留_LN\d+_模式与/并删除其他字符?

Perl单行命令实现指定文本过滤需求

需求说明

输入文本格式示例:

U_town/u_LN0_pk_LN3_bnb_LN155/DD0 U_DESIGN/u_LNxx_pk_LN99_bnb_LN151_LN11_/DD5
U_master/u_LN999_pk_LN767888_bnb_LN9772/Dnn111 u_LN999_pk_LN767888_bnb_LN9772_LN9999_LN11/DD
...

需要过滤后仅保留/和符合_LN\d+_模式的内容,输出效果:

/_LN0__LN3__LN155/ /_LN99__LN151_LN11_/
/_LN999__LN767888_/ _LN999__LN767888__LN9772_LN9999_/

失败命令分析

  • 第一条命令perl -pe 's/(?! _LN\d+_)[^\/].+//g' file:负前瞻位置错误,[^\/].+会匹配所有非/的字符序列,结合负前瞻条件不成立,导致所有内容被删除,返回空行。
  • 第二条命令perl -pe 's/(?! _LN\d+_)\w+//g' file:仅处理单词字符,未覆盖非单词字符,且负前瞻未正确匹配_LN\d+_的完整规则,最终只留下/。

正确单行命令实现

无需逐字符解析,以下两种单行Perl命令均可实现需求:

思路1:捕获保留内容,替换其他字符

perl -pe 's/.*?(_LN\d+_|\/)|./$1/g' file

逻辑解释:

  • .*?(_LN\d+_|\/):非贪婪匹配,优先捕获_LN\d+_或/,将符合要求的内容存入捕获组$1
  • |.:匹配所有未被上述规则捕获的单个字符
  • 替换时保留捕获组内容,其他字符替换为空,最终只留下需要的内容。

思路2:删除所有不符合要求的连续字符

perl -pe 's/(?:(?!_LN\d+_|\/).)+//g' file

逻辑解释:

  • (?:(?!_LN\d+_|\/).)+:匹配连续的、每个字符都不处于_LN\d+_或/开头位置的字符序列
  • 直接删除这些序列,留下符合要求的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 08:04:41