【发布时间】:2019-12-28 05:55:35
【问题描述】:
我正在尝试制作一个正则表达式来获取某个数字和下划线之间的字符串,例如:
我有 CP_01Ags_v5,所以我需要一个正则表达式来匹配 Ags。另一个示例可能是 CP_13Hgo_v5 并匹配 Hgo。
有什么想法吗?
【问题讨论】:
我正在尝试制作一个正则表达式来获取某个数字和下划线之间的字符串,例如:
我有 CP_01Ags_v5,所以我需要一个正则表达式来匹配 Ags。另一个示例可能是 CP_13Hgo_v5 并匹配 Hgo。
有什么想法吗?
【问题讨论】:
根据您描述的示例和匹配项。你想要一些类似的东西。
[0-9]+(.*)[_]
将其分解。 正则表达式查找出现一次或多次的任何数字,然后匹配数字之后直到 [_] 下划线的所有内容。
失败是假设您提供的示例相似。如果你的例子是
CP_13Hgo_v5asdf_
那么它就会匹配
Hgo_v5asdf
如果您有其他可能的发现,那么您需要此正则表达式的非贪婪版本。
[0-9]+(.*?)[_]
这将导致在此示例中找到两个组
CP_13Hgo_v5asdf_
将找到以下组:
Hgo
和
asdf
【讨论】:
您可以使用环视来匹配数字和下划线之间的字符串,例如
(?<=\d)[A-Za-z]+(?=_)
在 C# 中(注意需要在正则表达式中转义 \):
String s = @"CP_01Ags_v5 CP_13Hgo_v5";
Match m = Regex.Match(s, "(?<=\\d)[A-Za-z]+(?=_)");
while (m.Success) {
Console.WriteLine(m.Value);
m = m.NextMatch();
}
输出
Ags
Hgo
【讨论】:
如果您的字符串总是至少有两个字符,并且没有其他至少有两个字符的字符串,那么您可以应用以下内容:
var text = "CP_01Ags_v5";
var x = Regex.Match(text, @"(?<!^)[A-Za-z]{2,}");
【讨论】:
使用正则表达式Group:
(?<leftPart>_\d{2})(?<YourTarget>[a-zA-Z])(?<rightPart>_[a-zA-Z0-9]{2})
C#:
Regex re = new Regex(@"(?<leftPart>_\d{2})(?<YourTarget>[a-zA-Z])(?<rightPart>_[a-zA-Z0-9]{2})");
/*
* Loop
* To get value of group you want
*/
foreach (Match item in re.Matches("CP_01Ags_v5 CP_13Hgo_v5,"))
{
Console.WriteLine(" Match: " + item.ToString());
Console.WriteLine(" Your Target you want: " + item.Groups["YourTarget"]);
}
【讨论】: