我尝试使用带有负向后视的模式来获取不以“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。
1 回答
饮歌长啸
TA贡献1951条经验 获得超3个赞
第(?<!un)\w+\b
一个匹配前面没有un
(带有负向后视)的位置,然后匹配 1 个或多个单词字符,后跟单词边界位置。
您需要在前导词边界后使用负前瞻:
\b(?!un)\w+\b
请参阅正则表达式演示。
细节
\b
- 前导词边界(?!un)
- 如果接下来的两个单词字符是匹配失败的负前瞻un
\w+
- 1+字字符\b
- 尾随字边界。
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)
Console.WriteLine(s);
输出:
round
queue
- 1 回答
- 0 关注
- 180 浏览
添加回答
举报
0/150
提交
取消