我想以标准方式格式化人名的首字母缩写。每个字母的首字母都应该是大写,每个字母(从第一个到最后一个)都必须跟一个点。像这样:正则表达式希望格式化字符串
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