2011-06-09 95 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只是大写它。