我有一个这样的短语
计算机, Eddie 已进入市场。
我想得到Eddie这个词并忽略所有其他词,因为其他词是不变的,而Eddie这个词可能是任何东西。
如何在正则表达式中执行此操作?
抱歉,我正在使用.NET正则表达式:)
答案 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)
35 dogs
35
dogs
16 cats
16
cats
以下是捕获群组使用情况的简单示例:
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
如上所述,\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);
如果字符串是另一个字符串的一部分,则从正则表达式中删除^
和$
- 它们分别匹配行的开头和结尾。