4

我需要构建一个正则表达式来删除给定字符串中的前导“The”或“A”或“An”和“空格”。

例如,给定的字符串是:

敏捷的棕色狐狸跳过了懒狗

使用正则表达式,我希望删除领先的“The”并仅返回

敏捷的棕色狐狸跳过懒惰的狗

我试过(从评论中添加)

^*(?<=[The|An|A]\s){1}.*

它工作正常,但在一种情况下它没有返回预期结果。请看下面的场景。

输入:the quick brown fox --> 结果 = quick brown fox

输入:A quick brown fox --> 结果 = quick brown fox

输入:在晴天 --> 结果 = 晴天(预计是在晴天......因为字符串不是以 A 开头)

输入:American An bank --> 结果 = An bank(预期为 American An bank.. 因为字符串不是以 An 开头)

4

2 回答 2

9

你自己试过什么?您想要达到的目标并不难,例如在 Regular-Expresions.info 上尝试本教程

你想的太复杂了。尝试这个:

^(The|An|A)\s+

并替换为空字符串。

在 Regexr 上查看

^匹配字符串的开头。

(The|An|A)一个替代,匹配第一个合适的替代。

\s+匹配至少一个后面的空格。

变化

敏捷的棕色狐狸

一只敏捷的棕色狐狸

在一个阳光明媚的日子

美国安银行

快速棕色狐狸

快速棕色狐狸

在一个阳光明媚的日子

美国安银行

于 2013-01-24T06:59:13.710 回答
0

下面是 perl 中完整的一行:

perl -e 'my $a = "The quick brown fox jumps over the lazy dog"; $a =~ s/^\s*(?:The|An|A)\s+//gi; print $a;'

进行替换的部分是:

$a =~ s/^\s*(?:The|An|A)\s+//gi;

与您的单词和空格匹配的正则表达式是/^\s*(?:The|An|A)\s+/

于 2013-01-24T06:58:13.240 回答