2011-06-09 51 views
0

我想以標準方式格式化人名的首字母縮寫。每個字母的首字母都應該是大寫,每個字母(從第一個到最後一個)都必須跟一個點。像這樣:正則表達式希望格式化字符串

JKP => J.K.P. 
jkp => J.K.P. 
J.KP => J.K.P. 
JK.P => J.K.P. 
JKP. => J.K.P. 
J.K.P => J.K.P. 
etc... 

您有解決方案嗎?

+2

哪種語言?這看起來像一個簡單的字符串處理作業,你不需要這個正則表達式。 – codaddict 2011-06-09 09:59:53

+2

不知道如果正則表達式是解決問題最直觀的方法! – jdehaan 2011-06-09 10:01:13

+0

因此,路德維希·範·貝多芬現在獲得L.V.B.的首字母縮寫? – 2011-06-09 11:44:49

回答

2

由於我們不知道你正在使用這裏的語言是一些僞代碼,應該做的工作:

replace all dots in the string with '' 
split the string into a character array 
join the character array with a '.' and make it uppercase 
2

PHP等同放着清單:

$array = array (
'JKP', 
'jkp', 
'j.kp', 
'jk.p', 
'jkp.', 
'j.k.p.', 
); 

foreach ($array as $s) 
{ 
     echo strtoupper (preg_replace ('/(\w)\W*/', '\1.', $s)), "\n"; 
} 
1

這裏有一個Java解決方案:str.toUpperCase().replaceAll("(?<=\\w)(?!=\\.)", ".")

解碼,(?<=\w)(?!=\.)意味着字符之間的匹配,其中前一個字符是一個字符和下一個字符字符不是一個點

你應該能夠適應這種正則表達式與你的語言,無論是什麼。

編輯:納入@Qtax建議。

+0

甚至是'(?<= \ w)(?!\。)' – Qtax 2011-06-09 10:43:41

1

這裏是一個Perl的解決方案:

my @list = qw/JKP jkp J.KP JK.P JKP. J.K.P/; 

for(@list){ 
    s/\w(?!\.)/$&./g; 
    my $result = uc; 
    print "$result\n"; 
} 

s/\w(?!\.)/$&./g替換所有「字」字符後面沒有.與焦炭和.,然後用uc只是大寫它。

相關問題