我很困惑如何替换模式“.ext”之前的单词。
例子 :
替换前:abcd.ext.com
替换后:customer.ext.com
您可以使用类似的东西[^.]+(?=\.)
作为匹配并将其替换为customer
.
(?=\.)
是一个正向前瞻,当前面的部分后面有一个点时将匹配,但它本身不会匹配任何字符。
例如,在 C# 中,您可以使用
Regex.Replace(foo, @"[^.]+(?=\.)", "customer");
如果您在 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
,但是使用正则表达式来获取它是很困难的。
在 Unix 上,您可以像这样使用 sed:
echo "$str"|sed 's/abcd\(\.ext\)/customer\1/'
即寻找 abcd 紧随其后.ext
(在一组中捕获)。然后将其替换为customer
并匹配组 #1 ( .ext
)
如果您使用任何其他平台/语言方法应该是相同的。
$x =~ s/(.*)(\.ext\.com)/customer$2/;