C# 正则表达式获取字符串的第一部分

C# 正则表达式获取字符串的第一部分,c#,.net,regex,C#,.net,Regex,我有这个正则表达式 (?<=\d\.\s).+(?=\s-\s) 正则表达式给了我产品(第一部分)。如果存在子产品,则该子产品与该产品之间由一个用空格(-)包围的破折号分隔 但是,有些产品没有子产品。例如: 6. ComprehensiveBolt 正则表达式应该给我comprehensiveBolt,但它不返回任何内容 我需要对我的正则表达式进行什么更新,以便无论子产品是否存在,我都可以获得该产品?这是一种方法。 请注意,只有当您的产品可能是一个短语时,才需要此选项 (?这是一种方式

我有这个正则表达式

(?<=\d\.\s).+(?=\s-\s)
正则表达式给了我产品(第一部分)。如果存在子产品,则该子产品与该产品之间由一个用空格(
-
)包围的破折号分隔

但是,有些产品没有子产品。例如:

6. ComprehensiveBolt
正则表达式应该给我
comprehensiveBolt
,但它不返回任何内容

我需要对我的正则表达式进行什么更新,以便无论子产品是否存在,我都可以获得该产品?

这是一种方法。
请注意,只有当您的产品可能是一个短语时,才需要此选项

(?这是一种方式。
请注意,只有当您的产品可能是一个短语时,才需要此选项


(?
表示可选。你可以使用它。你能把完整的语法放在这里吗。我一定是做错了什么。它不是那样工作的。你正在使用
(?=\s-\s)
来限定产品。如果你将其设置为可选的
(?=\s-\s)?
它永远不必匹配断言,而且很可能不会匹配。更好的方法是使用边界或空白指示符。您可以尝试
(?如果产品名称总是由大写和小写字母组成,您可以做一些简单的事情,例如@sln:它只突出显示第一个字母
表示可选。您可以使用它。您可以将完整语法放在这里。我一定是做错了什么。它不是这样工作的。您正在使用
(?=\s-\s)
来限定产品。如果将其设置为可选的
(?=\s-\s)?
它将永远不必与断言匹配,而且很可能不会匹配。更好的方法是使用边界或空白指示器。您可以尝试
(?如果产品名称总是由大写字母和小写字母组成,您可以做一些简单的事情,例如@sln:它只突出显示第一个字母Perfect.第一次尝试成功。感谢slnPerfect.第一次尝试成功。感谢sln
6. ComprehensiveBolt
 (?<= \d \. \s )               # This must be behind
 (?:                           # -----------
      (?!                           # Neg assertion
           \s - \s                       # Not this ahead
        |  \d \. \s                      # Nor this ahead
      )
      .                             # Ok, grab this character
 )+                            #  1 to many times