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

rob*_*nal 2 regex

我有一个这样的短语

电脑,艾迪去了市场.

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

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

编辑:

对不起,我正在使用.NET正则表达式:)

pol*_*nts 6

您可以使用此模式:

Computer, (\w+) is gone to the market\.
Run Code Online (Sandbox Code Playgroud)

这使用括号来匹配\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.
Run Code Online (Sandbox Code Playgroud)

然后有两场比赛(见rubular.com).在第一场比赛中,第1组被捕获Eddie.在第二场比赛中,第1组被捕获Alice.

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

参考


一般技术

鉴于此测试字符串:

i have 35 dogs, 16 cats and 10 elephants
Run Code Online (Sandbox Code Playgroud)

然后(\d+) (cats|dogs)得到2个匹配结果(参见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]);
}
Run Code Online (Sandbox Code Playgroud)

以上打印(如ideone.com上所示):

Eddie
Alice
Run Code Online (Sandbox Code Playgroud)

API参考


关于规格

如上所述,\w+不匹配"James Bond".然而,它确实匹配"o_o","giggles2000"等(在rubular.com上看到).尽管合理实用,但您应尽量使模式尽可能具体.

类似地,(\d+) (cats|dogs)将匹配100 cats$100 catsup(上rubular.com所见).

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