Regexp想要格式化字母串

时间:2011-06-09 09:58:53

标签: regex

我想以标准方式格式化人名的首字母。首字母中的每个字母都应该是大写字母,每个字母(从第一个到第一个字母)必须后跟一个点。像这样:

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...

你有解决方案吗?

4 个答案:

答案 0 :(得分: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

答案 1 :(得分: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";
}

答案 2 :(得分:1)

这是一个java解决方案:str.toUpperCase().replaceAll("(?<=\\w)(?!=\\.)", ".")

已解码,(?<=\w)(?!=\.)表示匹配前一个字符为单词字符且下一个字符不是点的字符

你应该能够将这个正则表达式适应你的语言,无论是什么。

已编辑:要合并@Qtax建议。

答案 3 :(得分: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取代大写字母。