正则表达式在搜索模式之前替换单词

时间:2013-08-02 19:22:10

标签: regex

我很困惑如何在模式“.ext”之前替换一个单词。

示例:

替换前:abcd.ext.com

替换后:customer.ext.com

4 个答案:

答案 0 :(得分:1)

您可以使用[^.]+(?=\.)之类的内容作为匹配项,并将其替换为customer

(?=\.)是一个积极的前瞻,当前面的部分后面有一个点时会匹配,但它不会匹配任何字符。

E.g。在C#中你可以使用

Regex.Replace(foo, @"[^.]+(?=\.)", "customer");

答案 1 :(得分:0)

如果你在C#中这样做,我会建议你做这样的事情:

var newFileName = fileName.Replace(Path.GetFileName(fileName), "newFileNameValue");

如果它在VB.NET中,它看起来几乎完全相同:

Dim newFileName As String = fileName.Replace(Path.GetFileName(fileName), "newFileNameValue")

你可以使用正则表达式,但它可能有点矫枉过正而且不太稳定。看看,在构建一个正则表达式时,你必须将它分解为一个非常抽象的层次。您需要处理域中的每个扩展,并且该列表可以快速增长。因此,在Regex本身中包含这些扩展通常是不可行的。

要进一步添加问题,有效的文件名可能是这样的,MyFile.v1.l1.ext1.txt。该文件的扩展名为.txt,但使用正则表达式获取该文件很困难。

答案 2 :(得分:0)

在Unix上你可以像这样使用sed:

echo "$str"|sed 's/abcd\(\.ext\)/customer\1/'

即。紧接着.ext寻找abcd(在一个组中捕获它)。然后将其替换为customer并匹配组#1(.ext

如果您使用任何其他平台/语言方法应该是相同的。

答案 3 :(得分:0)

perl的

 $x =~ s/(.*)(\.ext\.com)/customer$2/;