正则表达式在特定单词之前获取所有单词

时间:2018-08-10 00:01:19

标签: c# regex

我想在特定单词之前获得尽可能多的单词,但这就是从所有行中获取所有字符。

([\w\s]+)( Subtract| Add) is (\d+) credits

如果该行与完整表达式不匹配,则无法匹配,为什么有些行仍然匹配?

This line cannot match This line cannot match too No way to match Why is matching this line Apple Banana Orange Add is 34 credits Watermelon Strawberry Subtract is 20 credits Sugar Add is 8 credits

那是一个样本https://regexr.com/3to7l

谢谢

2 个答案:

答案 0 :(得分:0)

问题在于\s可以匹配换行符,并将整个输入视为一个大匹配。

要修复您的正则表达式:

将第一部分[\w\s]+替换为.+。这将给出:

(.+)( Subtract| Add) is (\d+) credits

请参阅此处: RegexStorm working example

注意:这实际上改变了您的意图,因为.+现在可以匹配非单词和非空格字符。如果这是一个问题,则可能要使用^$\A\Z

有关更多信息,请参见此处,例如:https://www.mikesdotnetting.com/article/46/c-regular-expressions-cheat-sheet

https://download.microsoft.com/download/D/2/4/D240EBF6-A9BA-4E4F-A63F-AEB6DA0B921C/Regular%20expressions%20quick%20reference.pdf

答案 1 :(得分:0)

您可以使用此RegEx:

.*(?: Subtract| Add) is \d+ credits

您可以对其进行测试here