(範例) input: SMITH, A.J. and OTHER, A.N. and SCROOGE, E.
output: Smith, A.J. and Other, A.N. and Scrooge, E.
使用 SED 解決
echo "SMITH, A.J. and OTHER, A.N. and SCROOGE, E." |sed -e 's/\(\([A-Z][A-Z]\)\+\([,|.|\ ]\)\)/\L\1/g'
或 Rickz 提出的
echo "SMITH, A.J. and OTHER, A.N. and SCROOGE, E." |sed 's/\([A-Z]\)\([A-Z]*\)/\1\L\2/g'
或 PHP 版本的
#!/usr/bin/php
<?php
$argv[1];
$lens=strlen($argv[1]);
for($i=$lens-1;$i>=0;$i--)
{
if($argv[1][$i]>='A'&&$argv[1][$i]<='Z')
{
if($argv[1][$i-1]>='A'&&$argv[1][$i-1]<='Z')
{
$argv[1][$i]=strtolower($argv[1][$i]);
}
}
}
echo $argv[1];
?>
或 C 版本的
#include <stdio.h>
#include <string.h>
void main(int argc,char* argv[])
{
int i;
int lens=strlen(argv[1]);
for(i=lens-1;i>=0;i--)
{
if(argv[1][i]>='A'&&argv[1][i]<='Z')
{
if(argv[1][i-1]>='A'&&argv[1][i-1]<='Z')
{
argv[1][i]=argv[1][i]+32;
}
}
}
printf("%s",argv[1]);
}
或 python 版本的
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re,sys
def titlecase(s):
return re.sub(r"([A-Z])+('[A-Z]+)?",
lambda mo: mo.group(0)[0].upper() +
mo.group(0)[1:].lower(),
s)
data = sys.argv[1]
print titlecase(data)
以上都可以達成