关于perl regex:perl regex-将句尾替换为句点、一个空格、大写字母

Perl Regex - Replace the ending of sentences to be period, one whitespace, capital letter

我正在尝试开发一个regex,用更干净的句子结尾替换混乱的句子结尾。

例如,转动:

1
the quick.brown fox. jumped over! the slow.  dog

进入:

1
The quick. Brown fox. Jumped over. The slow. Dog

以下是我目前为止的情况:

1
2
3
my $test = ucfirst('the quick.brown fox. jumped over! the slow.  dog');
$test =~ s/([\.\?!]\s*[a-z])/\U$1/mg;
print $test;

结果是:

1
the quick.brown fox. jumped over! the slow.  dog

我搞不清楚如何强制使用句号和单个空格。

感谢您的帮助,谢谢!


我认为这会满足你的需求:

1
2
3
my $test = ucfirst('the quick.brown fox. jumped over! the slow.  dog');
$test =~ s/[.?!]\s*([a-z]?)/. \U$1/img;
say $test;

如您所见,我移动了开头的(,以便捕获的唯一内容是要转换为大写的字母。左侧匹配的所有零件都将被拆卸/更换,捕获支架(...)$1允许您将部分零件搬运到更换侧。

注意,在[...]中一般不需要反斜杠转义。

@Borodin的编辑在[a-z]之后增加了?,这使得字母可选。这允许标点和以下空格正常化,即使下一个东西不是字母,或者它是行的结尾。