用常量值替换捕获的组

时间:2017-11-30 16:31:48

标签: regex

我有一个像这样的字符串

sheet2.xml/xl/abc/workbook.xls/prest.ppt/download/images/sabbath.jpeg

我希望输出像这样

sheet.xml,xl/abc/workbook.xls,prest.ppt,download/images/sabbath.jpeg

我有一个正则表达式匹配唯一的' /'在.file扩展名之后,但不能用常量","

替换它们
\b\.\w+(?=/)\b(/)

此正则表达式匹配" /"在每个文件扩展名后,但我如何用","

替换它

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

如果你的正则表达式支持重置匹配,你可以在这里使用它!这是一个PCRE正则表达式:

\b\.\w+(?=\/)\b\K(\/)
               ^^
     Here we reset the match

因此,只有最后一个/会出现在匹配中,然后您可以将其替换为,

如果不支持\K,请尝试以下操作:

(\b\.\w+(?=\/)\b)\/

并替换为

$1,

这里的技巧是将文件扩展名部分移动到组1.然后在替换中你可以说"组1和逗号"。

一个稍快的版本,由评论中的ctwheels建议:

(\b\.\w+)\/\b

答案 1 :(得分:0)

根据您的编程语言或您使用的工具,以下示例可能需要调整才能正常工作。

您必须匹配ts=$(date -d'01/06/1980 00:00:00' +%s) lap=18 cat file | while read tt do dt=`echo $tt | awk '{print $1}' | awk -F"/" '{print $2"/"$3"/"$1}'` tm=`echo $tt | awk '{print substr($2,1,8)}'` ms=`echo $tt | awk '{print $2}' | awk -F":" '{print $NF}'` line=`echo $dt" " $tm` echo $line\ $(date -d "${line/// }" "+%s") | awk '{print (($3 - '$ts') + '$lap')'$ms'}' done 内的扩展程序才能在以后

中正确替换它

这是an example on regex101.com