当前位置:  开发笔记 > 编程语言 > 正文

什么正则表达式将空格后的任何字母大写?

如何解决《什么正则表达式将空格后的任何字母大写?》经验,为你挑选了3个好方法。

我正在寻找一个Perl正则表达式,它将使任何以空格开头的字符(或字符串中的第一个字符串)大写.

我很确定有一种简单的方法可以做到这一点,但我没有方便的Perl书,我不经常这样做,我记住它...



1> Jonathan Lef..:
s/(\s\w)/\U$1\E/g;

我最初建议:

s/\s\w/\U$&\E/g;

但是在使用" $& "时(甚至在我阅读@Manni的评论之前),警报就响起了.事实证明,他们完全合理 - 使用$&,$`和$'操作会导致正则表达式整体效率低下.

\ E对于这个正则表达式并不重要; \U在这种情况下它会关闭'case-setting'开关或\L小写.


如注释中所述,匹配字符串的第一个字符需要:

s/((?:^|\s)\w)/\U$1\E/g;

修正了第二个右括号的位置 - 谢谢,Blixtor.



2> Eric Johnson..:

根据您的确切问题,这可能比您想象的更复杂,简单的正则表达式可能无法正常工作.你有没有考虑过这个词里面的大写?如果单词以'... Word'之类的标点符号开头怎么办?有没有例外?国际人物怎么样?

使用像Text :: Autoformat或Text :: Capitalize这样的CPAN模块可能会更好,这些问题已经解决了.

use Text::Capitalize 0.2;
print capitalize_title($t), "\n";

use Text::Autoformat;
print autoformat{case => "highlight", right=>length($t)}, $t;

听起来像Text :: Autoformat可能更"标准",我会首先尝试.它是达米安写的.但是Text :: Capitalize做了一些Text :: Autoformat没有的东西.这是一个比较.

您还可以查看有关如何使用正则表达式正确地将标题或标题大写的perl Cookbook for recipie 1.14(第31页).



3> aks..:

像这样的东西应该做的伎俩 -

s!(^|\s)(\w)!$1\U$2!g

这简单地将扫描的表达式分成两个匹配 - 字符串的空白/开头为1美元,单词的第一个字符为2美元.然后我们在单词大写的开头后替换$ 1和$ 2.

我会将\ s更改为\ b,这更有意义,因为我们在这里检查字边界.

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有