首页 > 解决方案 > 如何删除单词开头的空格?

问题描述

通过查看与先前关于“如何将首字母大写”的问题相关的常见问题解答,我发现了很多我想尝试的问题的有趣解决方案,但在到达那里之前我有一个更紧迫的问题需要处理.

我的问题是我不能从每行名称的开头去除空格。名称包括名字和姓氏。姓氏是大写的。我尝试使用由 Brian D Foy 编辑的常见问题解答中的解决方案,但无论我尝试什么,我都会得到Use of uninitialised value $_ in substitution (s///) at ...

我的代码是这样的:

open DATA, “<“, “name.txt”;
my @file = <DATA>;

for each my $name (@file) {
    chomp $name;
    my @arr;
    
    # find ‘Mr.’ and ‘Ms.’, then ignore them
    @arr = split(/M.\.\s/g, $name);
    
    # remove leading white space from first names
    @arr = s/^\s+//g;

    print @arr,”\n”;
}

这是练习的一部分。我的解决方案与作者自己的解决方案几乎没有相似之处。在这里,我实际上应该将每个名字的第一个字母大写。我无法通过当前问题来完成练习。尽管代码作为既定目标的解决方案相当长,但在尝试找到实现相同结果的更简洁的方法之前,我想利用学习辅助中描述的方法。现在,我将非常感谢清楚为什么我会收到错误消息以及为什么我不能删除空格。谢谢你。

标签: regexremoving-whitespace

解决方案


您可以从拆分正则表达式中的名称中删除空格。

所以你的代码将变成:

open DATA, "<", "name.txt";
my @file = <DATA>;

foreach my $name (@file) {
    chomp $name;

    # find ‘Mr.’ and ‘Ms.’, then ignore them
    my @arr = split(/M.\.\s+/g, $name);

    print @arr,"\n";
}

推荐阅读