【问题标题】:Title Case for a sentence ending with parentheses [duplicate]以括号结尾的句子的标题案例[重复]
【发布时间】:2021-04-06 16:48:49
【问题描述】:

我想为每个以括号结尾仅包含大写字母的句子命名 注意:不要将某些单词的标题大写,例如“for, and, the”。

所以原句是:

经济教育基金会 (FEE)

应该是这样的:

经济教育基金会 (FEE)

非常感谢任何帮助!

这是我的“错误”代码,它将括号前的所有内容都大写...

(^[\p{L}\W]+)([(][\p{Lu}]{3,}[)]$)

\U\1\2

【问题讨论】:

  • 感谢您的帮助,它适用于整个句子的标题外壳(除了某些单词,即“and, the”...)但是如何仅将其应用于以括号结尾的句子?
  • 你应该清楚你的情况是什么句子:它是否以句号结尾?和新线?请提供更多正例和反例。
  • 如果foundation for economic education 中的for 应该保持非大写(如问题和cmets 所示),这不是How can I capitalize the first letter of each word in a string in Perl? 的重复。
  • 这实际上是一个 R 问题吗?你为什么用 Perl 标记它?

标签: regex perl


【解决方案1】:

匹配没有以(...)子字符串结尾的大写字母的字符串的正则表达式是,例如:

/^(\P{Lu}*)(?=\([^()]*\)$)/

请参阅regex demo。还有其他方法,但这种方法更方便以后在 Perl 中构建替换部件 RHS。

图案细节

  • ^ - 字符串开头
  • (\P{Lu}*) - 第 1 组:除大写字母外的任何零个或多个字符
  • (?=\([^()]*\)$) - 需要( 的正向前瞻,然后是除() 之外的任何零个或多个字符,然后是字符串末尾的) ($)。

那么你可以像这样使用Lingua::EN::Titlecase

#!/usr/bin/perl
use feature 'say';
use strict;
use warnings;
use Lingua::EN::Titlecase;

my $tc = Lingua::EN::Titlecase->new();
my $str = "foundation for economic education (FEE)";
say $str =~ s{^(\P{Lu}*)(?=\([^()]*\)$)}{ $tc->title($1) }re;

输出:Foundation for Economic Education (FEE)

【讨论】:

  • 感谢您的帮助!不幸的是,对于分组,我的正则表达式只能使用以下语句“\1”、“\2”等......,所以为了将字母大写,我添加了这个“\1>”。我不能使用“Lingua::EN::Titlecase”程序...
  • @Althussa 您使用什么编程语言?如果不是 Perl,它是什么? R?
  • @Althussa 请花一些时间澄清您在做什么,以便解决问题。
  • @Althussa 请让我知道您的问题是否得到正确回答,因为如果这是一个不清楚的问题(现在是),我宁愿投删除票而不是重新打开。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-08
  • 2014-06-17
  • 1970-01-01
  • 2017-07-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多