0

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

例子 :

替换前:abcd.ext.com

替换后:customer.ext.com

4

4 回答 4

1

您可以使用类似的东西[^.]+(?=\.)作为匹配并将其替换为customer.

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

例如,在 C# 中,您可以使用

Regex.Replace(foo, @"[^.]+(?=\.)", "customer");
于 2013-08-02T19:25:52.623 回答
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,但是使用正则表达式来获取它是很困难的。

于 2013-08-02T19:26:01.687 回答
0

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

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

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

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

于 2013-08-02T19:26:18.843 回答
0

perl

 $x =~ s/(.*)(\.ext\.com)/customer$2/;
于 2013-08-02T19:27:18.590 回答