在regex101中: https://regex101.com/r/FM88LA/1
在我的浏览器控制台中:
x='"AbCd123|999"'; "\"AbCd123|999\"" x.match(/[^\""|]+/) Array [ "AbCd123" ]
在shell中使用sed:
(base) balter@winmac:~/winhome/CancerGraph/TCGA$ echo '"AbCd123|99999"' | sed -En 's/([^\"|]+)/\1/p' "AbCd123|99999" (base) balter@winmac:~/winhome/CancerGraph/TCGA$ echo '"AbCd123|99999"' | sed -En 's/\"([^|]+)/\1/p' AbCd123|99999"
没关系,因为 sed 与一起使用的命令 -n 选项和 p 标志只打印不匹配的文本+成功替换的结果。
sed
-n
p
也就是说,你可以用
echo '"AbCd123|99999"' | sed -En 's/["|]*([^"|]+).*/\1/p'
请参阅 online demo 。
在这里,模式到达第一个不是 " 和 | 具有 ["|]* ,然后 ([^"|]+) 部分捕获一个或多个字符,而不是 “ 和 | ,然后 .* 匹配字符串的其余部分。
"
|
["|]*
([^"|]+)
“
.*
所有匹配但未捕获的内容都将被删除,因为您只要求 p 打印 \1 ,第1组值(用捕获 ([^“|]+) )。
\1
([^“|]+)