为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
慕尼黑的夜晚无繁华 2021-11-14 15:13:09
我尝试使用带有负向后视的模式来获取不以“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 - 尾随字边界。

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)

    Console.WriteLine(s);

输出:


round

queue


查看完整回答
反对 回复 2021-11-14
  • 1 回答
  • 0 关注
  • 180 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信