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之前的所有字符,只要求前一个字符不是下划线。