正则表达式替换以某个子字符串开头的任何单词的所有出现

时间:2014-12-30 18:42:29

标签: regex powershell

使用Windows PowerShell,我试图通过附加后缀替换大字符串中所有出现的某个字模式。

$string = "The string that contains several occurrences of ab_abcde, ab_abcde_FOO, ab_vwxyz, ab_vwxyz_BAR, etc"

我想在[{1}}

中为每个匹配的单词添加后缀“_XXX”

由于我希望所有匹配都以$stringab_abcde开头,所以我尝试过:

ab_vwxyz

以及其他一百万种变化无济于事。

我花了一整天时间在SO上寻找,但还没有找到一个效果很好的解决方案。我会感激一点帮助。

PS:由于我的$string -replace "(ab_abcde|ab_vwxyz)(.?)\s+", '$1$2_XXX' 实际上是mysqldump的输出,我的一些搜索词将被包含在重音符号(`)中,如下所示:`ab_abcde`,我想匹配它们。我不确定这会带来多大的复杂性,因为这也是PowerShell转义字符。

谢谢。

2 个答案:

答案 0 :(得分:2)

这样的东西
$string -replace "((?:ab_abcde|ab_vwxyz)\w*)", '$1_XXX'

Regex Demo

答案 1 :(得分:1)

喜欢这个吗?

$string = "The string that contains several occurrences of ab_abcde, ab_abcde_FOO, ab_vwxyz, ab_vwxyz_BAR, etc"

$string -replace '(ab_abcde.*?\b|ab_vwxyz.*?\b)', '$1_XXX'

The string that contains several occurrences of ab_abcde_XXX, ab_abcde_FOO_XXX, ab_vwxyz_XXX, ab_vwxyz_BAR_XXX, etc

编辑:发布其他评论后更新。