Regex 搜索模式前替换单词的正则表达式

Regex 搜索模式前替换单词的正则表达式,regex,Regex,我很困惑如何替换模式“.ext”之前的单词 例如: 替换前:abcd.ext.com 替换后:customer.ext.com您可以使用类似[^.]+(?=\)的内容作为匹配项,并将其替换为customer (?=\)是一个正向前瞻,当前面的部分后面有一个点时,它将匹配,但它本身不会匹配任何字符 例如,在C#中,您可以使用 Regex.Replace(foo, @"[^.]+(?=\.)", "customer"); 如果你在C#中这样做,我建议你只做这样的事情: var newFileNam

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

例如:

替换前:abcd.ext.com


替换后:customer.ext.com

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

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

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

Regex.Replace(foo, @"[^.]+(?=\.)", "customer");
如果你在C#中这样做,我建议你只做这样的事情:

var newFileName = fileName.Replace(Path.GetFileName(fileName), "newFileNameValue");
echo "$str"|sed 's/abcd\(\.ext\)/customer\1/'
如果在VB.NET中,它看起来几乎完全相同:

Dim newFileName As String = fileName.Replace(Path.GetFileName(fileName), "newFileNameValue")
您可以使用正则表达式,但它可能有点过头,不太稳定。看,在构建正则表达式时,必须将其分解为一个真正抽象的级别。您需要处理域中的每个扩展,并且该列表可以快速增长。因此,在正则表达式本身中包含这些扩展通常是不可行的


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

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

var newFileName = fileName.Replace(Path.GetFileName(fileName), "newFileNameValue");
echo "$str"|sed 's/abcd\(\.ext\)/customer\1/'
i、 e.查找abcd,然后立即查找
.ext
(将其捕获到一个组中)。然后将其替换为
customer
并匹配组1(
.ext

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

perl
你用什么语言工作?