C# 如何使用正则表达式获取字符串的一部分

C# 如何使用正则表达式获取字符串的一部分,c#,regex,C#,Regex,我试图找到下面这个非常简单字符串的正则表达式 我不知道怎么做 考虑: A.B.C.MSI_AlphaName C.D.E.MSI_AlphaName_1 X.Y.Z.MSI_AlphaName_2 ... MSI_AlphaName_99 等等。如果我需要提取AlphaName,那么这个正则表达式是什么 我试过: .+\.MSI_(.+)(?:_\d+)? 我会用这个表达: MSI_([^_]+)(?:_|$) 捕获组将匹配第一个下划线之后的所有内容,直到第二个下划线或结尾或字符串,以先到

我试图找到下面这个非常简单字符串的正则表达式

我不知道怎么做

考虑:

A.B.C.MSI_AlphaName
C.D.E.MSI_AlphaName_1
X.Y.Z.MSI_AlphaName_2
...
MSI_AlphaName_99
等等。如果我需要提取
AlphaName
,那么这个正则表达式是什么

我试过:

.+\.MSI_(.+)(?:_\d+)?

我会用这个表达:

MSI_([^_]+)(?:_|$)

捕获组将匹配第一个下划线之后的所有内容,直到第二个下划线或结尾或字符串,以先到者为准。

而不是。+,您将希望匹配
[^\u]
(不是
“\u”
的字符集),除非您希望所有内容都在第一个“\u

因此,您的表达式如下所示:

.+\.MSI_([^_]+)(?:_\d+)?

我想要问题中提到的MSI。@FlipEx17您说“我需要提取
AlphaName
”。你也需要
MSI
吗?哦,好吧,我需要MSI作为一个限制。但是我明白了:[^]+MSI([^]+)(?:[^ |$)你可以将第一个
[^]+
更改为
[^]
。这里不需要通配符,因为您没有捕获MSI之前的所有字符,只要求前一个字符不是下划线。