2009-06-13 66 views
2

我想使用正則表達式來屏蔽字符串中每個單詞的前三個字母數字字符(例如「x」),所以「1 Buckingham倫敦宮路「將成爲」1 Bucxxxxxxx Palxxx Roax,Lonxxx「。使用字符串替換屏蔽字符串的正則表達式

保持前三個字符很容易利用

s/\b(\w{0,3})(.*)\b/$1/g 

做,但我似乎無法弄清楚如何插入長度($ 2)倍屏蔽字符而不是$ 2中。

謝謝!

回答

0
use warnings; 
use strict; 

my $string = "1 Buckingham Palace Road, London"; 

$string =~ s(
    \b(\w{0,3})(\w*)\b 
){ 
    $1 . ('x' x length $2) 
}gex; 

print $string, "\n"; 
4

C#:

new Regex(@"(?<!\b.{0,2}).").Replace("1 Buckingham Palace Road, London", "x"); 

既然你說這是語言無關的,我相信這可以很容易地移植到你選擇的語言......

或者,你可以只得到$ 2的長度並填寫x的老式方式。

+0

最佳選擇。 +1使用負面lookbehind。 – 2009-06-13 06:41:17

+0

看起來不錯。顯然這個問題並不像我原先認爲的那樣與語言無關,因爲Perl似乎沒有實現可變長度的lookbehind(但是C#)。我會盡力找出今天晚些時候如何解決這個問題。 – 2009-06-13 07:35:07

1

正回顧後,用三個字字符的任何單詞字符之前它被變更爲X:

S /(?< = \ W {3})\ W/$ 1X /克;

例如perl腳本:

my $string = "1 Buckingham Palace Road, London"; 
$string =~ s/(?<=\w{3})\w/$1x/g; 
print qq($string\n);