C# 用于包含具有特定字符的单词的正则表达式

C# 用于包含具有特定字符的单词的正则表达式,c#,regex,C#,Regex,我需要一个正则表达式来确定一个句子是否包含一个单词。如果单词有前缀或后缀,则该单词是有效的,但对某些特定字符有效,例如,.*+-etc。我正在搜索过程单词,对于有效的句子,我将它们加粗 进程 过程 加工 特定于流程的 加工 处理机 游行队伍 进程间 单处理器 多处理 流程的 “过程” 过程10 由于您的所有表达式都包含:process只需使用IndexOf滚动您自己的表达式,与使用Regex相比,您将获得更好的性能和对分配的更多控制,这对于这个简单的任务来说太过复杂了 使用单词边界类(\b):

我需要一个正则表达式来确定一个句子是否包含一个单词。如果单词有前缀或后缀,则该单词是有效的,但对某些特定字符有效,例如,.*+-etc。我正在搜索过程单词,对于有效的句子,我将它们加粗

  • 进程
  • 过程
  • 加工
  • 特定于流程的
  • 加工
  • 处理机
  • 游行队伍
  • 进程间
  • 单处理器
  • 多处理
  • 流程的
  • “过程”
  • 过程10

  • 由于您的所有表达式都包含:
    process
    只需使用IndexOf滚动您自己的表达式,与使用
    Regex
    相比,您将获得更好的性能和对分配的更多控制,这对于这个简单的任务来说太过复杂了


    使用单词边界类(
    \b
    ):

    在不区分大小写的正则表达式匹配中,应提供正确的结果:

    string[] strings = new string[] {
        @"processes",
        @"process",
        @"Processing",
        @"process-specific",
        @"processed",
        @"processor",
        @"procession",
        @"Inter-process",
        @"uniprocessor",
        @"multiprocessing",
        @"process's",
        @"""process""",
        @"process10"
    };
    
    foreach (string s in strings)
    {
        if (Regex.IsMatch(s, @"\bprocess\b", RegexOptions.IgnoreCase))
            Console.ForegroundColor = ConsoleColor.Green;
        else
            Console.ForegroundColor = ConsoleColor.Red;
        Console.WriteLine(s);
    }
    

    如果允许使用尾随数字,请执行以下操作:

    \bprocess(?:\b|\d+)
    

    您尝试过什么吗?[-'“]进程[-'”]使用此正则表达式,但它仅高度指示“进程”进程也无效。请您的问题显示您遇到问题的代码,然后我们可以尝试帮助解决特定问题。您还应该阅读。不区分大小写。如果您对字符串进行了修改以对其进行扫描…?
    (\bprocess\b|process[^a-z].*)
    还应捕获“process10”或similar@johnb
    \b进程(?:\b |\d+
    应该执行@jonb,这会根据长度为匹配添加指数时间。。。您额外的
    *
    量词在这里是没有意义的,因为边界已经定义。。。此外,这也是为什么您不使用Regex…
    multiprocessing
    包含进程,但基于这个问题,它是无效的。当然是…
    multip
    process
    ing
    除非您的系统字符串和Regex库经过高度优化,并且可以使用内部函数,否则滚动您自己的解决方案很可能无法满足您的要求更好的性能和更低的内存使用率。投票否决,但事实就是事实。。。
    \bprocess(?:\b|\d+)