我很困惑如何在模式“.ext”之前替换一个单词。
示例:
替换前:abcd.ext.com
替换后:customer.ext.com
答案 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)
$x =~ s/(.*)(\.ext\.com)/customer$2/;