使用负向后视匹配字符串中的单词

我尝试使用带有负向后视的模式来获取不以“un”开头的单词。这是代码:


using Regexp = System.Text.RegularExpressions.Regex;

using RegexpOptions = System.Text.RegularExpressions.RegexOptions;


string quote = "Underground; round; unstable; unique; queue";

Regexp negativeViewBackward = new Regexp(@"(?<!un)\w+\b", RegexpOptions.IgnoreCase);

MatchCollection finds = negativeViewBackward.Matches(quote);


Console.WriteLine(String.Join(", ", finds));

它总是返回完整的单词集,但应该只返回round, queue。


慕尼黑的夜晚无繁华
浏览 181回答 1
1回答

饮歌长啸

第(?<!un)\w+\b一个匹配前面没有un(带有负向后视)的位置,然后匹配 1 个或多个单词字符,后跟单词边界位置。您需要在前导词边界后使用负前瞻:\b(?!un)\w+\b请参阅正则表达式演示。细节\b&nbsp;- 前导词边界(?!un)&nbsp;- 如果接下来的两个单词字符是匹配失败的负前瞻&nbsp;un\w+&nbsp;- 1+字字符\b&nbsp;- 尾随字边界。C# 演示:string quote = "Underground; round; unstable; unique; queue";Regex negativeViewBackward = new Regex(@"\b(?!un)\w+\b", RegexOptions.IgnoreCase);List<string> result = negativeViewBackward.Matches(quote).Cast<Match>().Select(x => x.Value).ToList();foreach (string s in result)&nbsp; &nbsp; Console.WriteLine(s);输出:roundqueue
打开App,查看更多内容
随时随地看视频慕课网APP