我需要使用正則表達式匹配*字符的第二個和隨後的出現。實際上,我使用替換法將其刪除之前,所以這裏的一些例子和後:使用正則表達式刪除重複的字符
test* -> test* (no change)
*test* -> *test
test** *e -> test* e
是否有可能用正則表達式來做到這一點? 感謝
我需要使用正則表達式匹配*字符的第二個和隨後的出現。實際上,我使用替換法將其刪除之前,所以這裏的一些例子和後:使用正則表達式刪除重複的字符
test* -> test* (no change)
*test* -> *test
test** *e -> test* e
是否有可能用正則表達式來做到這一點? 感謝
如果.NET可以看任意數量的背後應對,試圖用一個空字符串替換以下模式:
(?<=\*.*)\*
。
PS Home:\> 'test*','*test*','test** *e' -replace '(?<=\*.*)\*',''
test*
*test
test* e
另一種方法是這樣的模式:
(?<=\*.{0,100})\*
其中數字100
可以與目標串的大小所替代。
和測試使用Mono 2.0以下:
using System;
using System.Text.RegularExpressions;
public class Test
{
public static void Main()
{
Regex r = new Regex(@"(?<=\*.*)\*");
Console.WriteLine("{0}", r.Replace("test*", ""));
Console.WriteLine("{0}", r.Replace("*test*", ""));
Console.WriteLine("{0}", r.Replace("test** *e", ""));
}
}
也產生:
test*
*test
test* e
非最優的,但另一種方法。 記錄第一次出現的索引,替換所有出現的記錄,並將第一次出現重新插入記錄的索引處。
好吧,使用正則表達式時所有背後的東西都不是最優的! :) – 2010-04-27 21:30:42
$str =~ s/\*/MYSPECIAL/; #only replace the first *
$str =~ s/\*//g; #replace all *
$str =~ s/MYSPECIAL/\*/; #put * back
.NET語言是什麼?我在這裏錯過了什麼嗎? – Joey 2010-04-28 13:14:40
第一個在.NET 4中工作。我沒有在先前的版本中測試過它。 – 2010-04-27 21:23:08
增加了一個PowerShell概念驗證;第一個工作。 – Joey 2010-04-27 21:24:37
@Johannes,歡呼聲。 PowerShell是否使用相同的正則表達式引擎? (是用.NET編寫的PowerShell?) – 2010-04-27 21:29:18