我想以標準方式格式化人名的首字母縮寫。每個字母的首字母都應該是大寫,每個字母(從第一個到最後一個)都必須跟一個點。像這樣:正則表達式希望格式化字符串
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...
您有解決方案嗎?
我想以標準方式格式化人名的首字母縮寫。每個字母的首字母都應該是大寫,每個字母(從第一個到最後一個)都必須跟一個點。像這樣:正則表達式希望格式化字符串
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...
您有解決方案嗎?
由於我們不知道你正在使用這裏的語言是一些僞代碼,應該做的工作:
replace all dots in the string with ''
split the string into a character array
join the character array with a '.' and make it uppercase
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";
}
這裏有一個Java解決方案:str.toUpperCase().replaceAll("(?<=\\w)(?!=\\.)", ".")
解碼,(?<=\w)(?!=\.)
意味着字符之間的匹配,其中前一個字符是一個字符和下一個字符字符不是一個點
你應該能夠適應這種正則表達式與你的語言,無論是什麼。
編輯:納入@Qtax建議。
甚至是'(?<= \ w)(?!\。)' – Qtax 2011-06-09 10:43:41
這裏是一個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
只是大寫它。
哪種語言?這看起來像一個簡單的字符串處理作業,你不需要這個正則表達式。 – codaddict 2011-06-09 09:59:53
不知道如果正則表達式是解決問題最直觀的方法! – jdehaan 2011-06-09 10:01:13
因此,路德維希·範·貝多芬現在獲得L.V.B.的首字母縮寫? – 2011-06-09 11:44:49