我目前正在使用asp.net和C#构建一个网页。我无法解析用户提供的字符串。例如,用户提供了下面的字符串,我需要提取单引号或双引号之外的单词。有人可以帮我解决这个问题吗?提前感谢你的帮助。正则表达式提取单引号或双引号之外的字符串
"we run" live "experiments" inside and outside 'a lab'
使用正则表达式
预期的结果是:
live
inside
and
outside
我目前正在使用asp.net和C#构建一个网页。我无法解析用户提供的字符串。例如,用户提供了下面的字符串,我需要提取单引号或双引号之外的单词。有人可以帮我解决这个问题吗?提前感谢你的帮助。正则表达式提取单引号或双引号之外的字符串
"we run" live "experiments" inside and outside 'a lab'
使用正则表达式
预期的结果是:
live
inside
and
outside
这将做到这一点。所有小组赛 '所享有' 匹配你想要什么:
(?<unquote>[^"'\s]+)|(?:["][^"]+?["])|(?:['][^']+?['])
C#的测试代码:
var matches = Regex.Matches(@"""we run"" live ""experiments"" inside and outside 'a lab'", @"(?<unquote>[^""'\s]+)|(?:[""][^""]+?[""])|(?:['][^']+?['])");
foreach(Match match in matches)
{
if(match.Groups["unquote"].Success)
{
Console.WriteLine(match.Groups["unquote"].Value.Trim());
}
}
输出:
现场
内
和
外
其中:
<unquote>
把一个叫做所享有^"'\s
方法相匹配的一切,是不是双单引号或空间群手段。(?:["][^"]+?["])
表示在引用下一个报价单内的所有内容。注意+?这样就不会贪婪和?:这样该组就不会被捕获。单引号一样。这将使用空字符串“”和单引号嵌套在双引号中的字符串。你想忽略撇号吗?如果是的话,那么你需要扩展正则表达式以允许'前面没有空格:
(?<unquote>(?>[^"\s](?<!\s[']))+)|(?:["][^"]+?["])|(?:['][^']+?['])
祝你好运与你的现场实验。
它像一个魅力一样工作。谢谢! – user2802962
var parts = Regex.Split(input, @"[""'].+?[""']")
.SelectMany(x => x.Split())
.Where(s => !String.IsNullOrWhiteSpace(s))
.ToList();
或
var parts = Regex.Split(input, @"[""'].+?[""']")
.SelectMany(x => x.Split(new char[]{' '}, StringSplitOptions.RemoveEmptyEntries))
.ToList();
这是否允许:''live''? –