如何在c#中使用正则表达式编写正则表达式以从字符串中获取子字符串

本文关键字:字符串 正则表达式 获取 | 更新日期: 2023-09-27 18:10:05

我有以下字符串

string s=@"'Users'Public'Roaming'Intel'Wireless'Settings"; 

我想输出像

这样的字符串
string output="Wireless";

子字符串我想要的应该在"Intel'"之后,它应该在"Intel'"之后的第一个"'"结束,在字符串Intel之前和Intel之后,字符串可能不同。我已经实现了它使用string.substring(),但我想得到它使用正则表达式?我应该写什么正则表达式来得到这个字符串

如何在c#中使用正则表达式编写正则表达式以从字符串中获取子字符串

对于正则表达式,您可以使用:

(?<=intel'')([^'']+?)[''$]
演示

注意i标志

顺便说一句,Split是比正则表达式更简单和更快的解决方案。正则表达式与字符串的模式相关联。对于静态/固定字符串结构,使用字符串函数对其进行操作是一个明智的解决方案。

使用正则表达式,它看起来像

var txt = @"'Users'Public'Roaming'Intel'Wireless'Settings";
var res = Regex.Match(txt, @"Intel''([^'']+)", RegexOptions.IgnoreCase).Groups[1].Value;

但是通常,您应该使用具有此类要求的字符串方法。下面是一个演示代码(没有错误检查):

var strt = txt.IndexOf("Intel''") + 6;   // 6 is the length of "Intel'"
var end = txt.IndexOf("''", strt + 1);   // Look for the next "'"
var res2 = txt.Substring(strt, end - strt); // Get the substring

参见IDEONE demo

如果你想要之后的所有内容/

/(?:intel'')(('w+''?)+)/gi
http://regexr.com/3blqm

您将需要$1结果。请注意,如果字符串后面不包含Intel/或任何内容,则$1将为空或不存在。

为什么不使用Path.GetDirectoryNamePath.GetFileName呢:

string s = @"'Users'Public'Roaming'Intel'Wireless'Settings";
string output = Path.GetFileName(Path.GetDirectoryName(s));
Debug.Assert(output == "Wireless");

可以遍历目录组件,直到找到单词Intel并返回下一个组件。