正则表达式从常用短语中获取单个单词

时间:2010-07-16 09:12:12

标签: regex

我有一个这样的短语

计算机, Eddie 已进入市场。

我想得到Eddie这个词并忽略所有其他词,因为其他词是不变的,而Eddie这个词可能是任何东西。

如何在正则表达式中执行此操作?

编辑:

抱歉,我正在使用.NET正则表达式:)

2 个答案:

答案 0 :(得分:6)

您可以使用此模式:

Computer, (\w+) is gone to the market\.

这使用括号匹配\w+并在第1组中捕获它。

请注意,结尾的句点已使用\进行了转义,因为.是正则表达式元字符。

鉴于输入:

LOL! Computer, Eddie is gone to the market. Blah blah
blah. Computer, Alice is gone to the market... perhaps...

Computer, James Bond is gone to the market.

然后有两场比赛(as seen on rubular.com)。在第一场比赛中,第1组抓获Eddie。在第二场比赛中,第1组抓获了Alice

请注意,\w+James Bond不匹配,因为\w+是“一个或多个单词字符”的序列。如果您需要匹配这些非“单字”名称,那么只需将其替换为正则表达式以匹配名称。

参考


一般技术

鉴于此测试字符串:

i have 35 dogs, 16 cats and 10 elephants

然后(\d+) (cats|dogs)产生2个匹配结果(see on rubular.com

  • 结果1:35 dogs
    • 第1组捕获35
    • 第2组捕获dogs
  • 结果2:16 cats
    • 第1组捕获16
    • 第2组捕获cats

相关问题


C#片段

以下是捕获群组使用情况的简单示例:

var text = @"

LOL! Computer, Eddie is gone to the market. Blah blah
blah. Computer, Alice is gone to the market... perhaps...

Computer, James Bond is gone to the market.

";

Regex r = new Regex(@"Computer, (\w+) is gone to the market\.");

foreach (Match m in r.Matches(text)) {
  Console.WriteLine(m.Groups[1]);
}

以上打印(as seen on ideone.com):

Eddie
Alice

API参考


关于规范

如上所述,\w+"James Bond"不匹配。但是,它会匹配"o_o""giggles2000"等(as seen on rubular.com)。尽可能合理,你应该尽量使你的模式尽可能具体。

同样,(\d+) (cats|dogs)将匹配100 cats $100 catsup中的{{1}}。

这些是模式本身的问题,与捕获组没有直接关系。

答案 1 :(得分:2)

/^Computer, \b(.+)\b is gone to the market\.$/

Eddie将位于第一个捕获的字符串$1中。如果您指定语言,我们可以告诉您如何提取它。

编辑:C#:

Match match = Regex.Match(input, @"^Computer, \b(.+)\b is gone to the market\.$");
Console.WriteLine(match.Groups[1].Value);

如果字符串是另一个字符串的一部分,则从正则表达式中删除^$ - 它们分别匹配行的开头和结尾。