输入字符串:
"test.com/dfafsf--fasfgf--fefegf-12345678+test (first text)"
我想应用正则表达式来检查输入字符串是否包含:12345678+test
如果找到则希望将其转换为:
sample.com/klklklklkl-klklkl-'CAPTURED12345678'+fefgreg-dgferg
我试过这个正则表达式:
\d+(?=+test)
有人有想法吗?
答案 0 :(得分:0)
您的模式是正确的。但是如果你的字符串是一个文件:
您可以一步使用 Perl 与匹配和替换:
输入:
"test.com/dfafsf--fasfgf--fefegf-12345678+test (first text)"
你可以申请:
perl -lpe '/\d+(?=\+test)/g && ($m = $&) && s/^.+$/sample.com\/klklklklkl-klklkl-'CAPTURED'$m+fefgreg-dgferg/g' file
/\d+(?=\+test)/g
($m = $&)
s/^.+$/sample.com\/klklklklkl-klklkl-'CAPTURED'$m+fefgreg-dgferg/g
输出是:
sample.com/klklklklkl-klklkl-CAPTURED12345678+fefgreg-dgferg
正如您所看到的那样, CAPTURED12345678 周围没有单'
引用,因为我使用[teg:bash]并且无法处理,因此您使用'"'"'CAPTURED$m'"'"'
代替。
但是如果你想:我的问题是,如何在捕获的数字之前和之后添加文字
您需要知道您的模式存储在哪里,或者实际上哪个变量或方法负责子匹配。例如,如果 Perl ,$&
会处理它,我也会使用它。或者在 C ++ 类.str()
match_results
方法中
因此,使用 Perl ,您可以使用s/^.+$/Before-Match $& After-Match/g
并将其应用于文件:
perl -lpe '/\d+(?=\+test)/g && ($m = $&) && s/^.+$/Before-Match=> $m <=After-Match/g' file
输出将是:
Before-Match=> 12345678 <=After-Match