如何在c#中使用正则表达式编写正则表达式以从字符串中获取子字符串
本文关键字:字符串 正则表达式 获取 | 更新日期: 2023-09-27 18:10:05
我有以下字符串
string s=@"'Users'Public'Roaming'Intel'Wireless'Settings";
我想输出像
这样的字符串string output="Wireless";
子字符串我想要的应该在"Intel'"之后,它应该在"Intel'"之后的第一个"'"结束,在字符串Intel
之前和Intel
之后,字符串可能不同。我已经实现了它使用string.substring(),但我想得到它使用正则表达式?我应该写什么正则表达式来得到这个字符串
对于正则表达式,您可以使用:
(?<=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.GetDirectoryName
和Path.GetFileName
呢:
string s = @"'Users'Public'Roaming'Intel'Wireless'Settings";
string output = Path.GetFileName(Path.GetDirectoryName(s));
Debug.Assert(output == "Wireless");
可以遍历目录组件,直到找到单词Intel
并返回下一个组件。