C# 除了最后一个单词外,解析所有单词的正则表达式是什么?

C# 除了最后一个单词外,解析所有单词的正则表达式是什么?,c#,regex,C#,Regex,我想匹配整个字符串,除了最后一个单词。i、 e.为了 This is my house 匹配的字符串应该是这是我的。这个正则表达式是什么?对于这个任务,您确实不需要regexp,删除从最后一个空格到字符串末尾的所有内容,您就可以得到所需的内容。如果它以空格结尾(根据示例),您可以将其定义为: ^(.*)\s 这将删除结尾处的空白,我认为这是理想的效果。这应该可以做到: ^([\w ]*) [\w]+$ ^是行的开始 ([\w]*)是由任意数量的字母和空格组成的组 \w+是后跟一个或多个单

我想匹配整个字符串,除了最后一个单词。i、 e.为了

This is my house

匹配的字符串应该是
这是我的
。这个正则表达式是什么?

对于这个任务,您确实不需要regexp,删除从最后一个空格到字符串末尾的所有内容,您就可以得到所需的内容。

如果它以空格结尾(根据示例),您可以将其定义为:

 ^(.*)\s
这将删除结尾处的空白,我认为这是理想的效果。

这应该可以做到:

^([\w ]*) [\w]+$
^
是行的开始

([\w]*)
是由任意数量的字母和空格组成的组

\w+
是后跟一个或多个单词字符的空格


$
是一行的结尾。

您可以使用
拆分
并执行以下操作-

var text = "This is my house";
var arr = text.Split(' ');
var newtext = String.Join(" ",arr.Take(arr.Length-1));

就我个人而言,对于这样一个简单的任务,我会选择一些不那么不透明的东西:

var words = Regex.Split("this is my house",@"\s");
var allButLastWord = string.Join(" ",words.Take(words.Length-1));

除非你下定决心要使用正则表达式。对于这样一个简单的操作来说似乎有点过火。

一个强大的解决方案:

(?!\s)(.+)(?=\s)

看到它在工作吗

例如:“5小时”、“5小时”、“25分钟”、“25分钟”

解释
  • 负前瞻
    (?!\s)

    断言下面的正则表达式不匹配
    \s
    匹配任何空白字符(等于
    [\r\n\t\f\v]
  • 第一捕获组
    (.+)
    • +
      匹配任何字符(行终止符除外)
    • +
      量词-在一次和无限次之间进行匹配,尽可能多地匹配,根据需要返回(贪婪)
  • 正向前瞻
    (?=\s)

    断言下面的正则表达式匹配
    \s
    匹配任何空白字符(等于
    [\r\n\t\f\v]

很接近,但最好是
^(?:[\w]*)(?=[\w]+$)
,因此匹配值适合于从组中进行搜索。或者更简单:
^.*(=[\w]+$)
。你可以允许标点符号以:
^..*(=[\w]+[.?!]?$)
(.+)(?=\w)
:除了最后一个单词以外的所有单词都同意,如果它这么简单,myString.SubString(0,myString.LastIndexOf(“”))应该这样做。
string GetAllWordsExceptLast (string original)
{
    original = original.Trim();
    return original.Substring(0, original.LastIndexOf(' '));
}