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

本文关键字:单词 正则表达式 是什么 最后一个 单词外 | 更新日期: 2023-09-27 18:11:14

我想匹配除了最后一个单词之外的整个字符串。即

This is my house

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

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

这应该做到:

^(['w ]*) ['w]+$

^是线路的起点

(['w ]*)是一组任意数量的字母和空格

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

$是行的末尾。

您真的不需要regexp来执行此任务,删除从最后一个空格到字符串末尾的所有内容,您就可以获得所需内容。

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

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

如果它以空白结尾(如示例所示(,则可以将其定义为:

 ^(.*)'s

这将删除末尾的空白,我认为这是理想的效果。

您可以使用Split并执行类似的操作-

var text = "This is my house";
var arr = text.Split(' ');
var newtext = String.Join(" ",arr.Take(arr.Length-1));
string GetAllWordsExceptLast (string original)
{
    original = original.Trim();
    return original.Substring(0, original.LastIndexOf(' '));
}

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

一个强大的解决方案修剪前导空间:

(?!'s)(.+)(?='s)
在regex101.com 上查看

示例:">5小时">5小时">225分钟">225分钟";

解释

  • 负面展望(?!'s)
    断言下面的Regex不匹配
    's匹配任何空白字符(等于This is my0(
  • 第一捕获组(.+)
    • .+匹配任何字符(行终止符除外(
    • +量化器——在一次和无限次之间匹配,尽可能多次,根据需要回馈(贪婪(
  • 积极展望(?='s)
    断言下面的Regex匹配
    's匹配任何空白字符(等于['r'n't'f'v ](