用于提取数字的正则表达式
本文关键字:正则表达式 数字 提取 用于 | 更新日期: 2023-09-27 18:15:17
我有一个输入字符串列表如下:"PlusContent"PlusArchieve"PlusContent1"PlusArchieve1"
等,这意味着总是有两个条目构建一个主题{content, archive}。现在我想要得到字符串末尾的数字(我们称之为postfix)。为此,我使用了以下正则表达式:
Regex r = new Regex(@"Plus.+?('d*)$", RegexOptions.IgnoreCase);
现在我循环匹配(应该最多2,第一个是整个字符串,第二个是实际匹配,如果存在)。
foreach (Match m in r.Matches(tester)) Console.WriteLine(m);
其中tester是我列表中的当前字符串。但结果我总是得到整个字符串,而不是它的后缀。我在regexHero上测试了相同的正则表达式,它工作了…
你知道哪里出了问题吗?
注::这是整个代码:
List<string> words = new List<string> { "PlusContent", "PlusArchieve", "PlusContent1", "PlusArchieve1" };
foreach(string tester in words) {
Regex r1 = new Regex(@"Plus.+?('d*)$", RegexOptions.IgnoreCase);
foreach (Match m in r1.Matches(tester)) Console.WriteLine(m);
}
但是由于一些奇怪的原因,我只从列表中得到原始字符串。
尝试捕获组并从索引1中获得匹配的组
'bPlus'D*('d*)'b
演示阅读更多关于捕获组
模式说明:
'b the word boundary
Plus 'Plus'
'D* non-digits (all but 0-9) (0 or more times (most))
( group and capture to '1:
'd* digits (0-9) (0 or more times (most))
) end of '1
'b the word boundary
user3218114的正则表达式是正确的。由于数字是使用分组捕获的,因此需要使用Groups属性访问它们,如下所示:
List<string> words = new List<string> { "PlusContent", "PlusArchieve", "PlusContent1", "PlusArchieve1" };
foreach (string tester in words)
{
Regex r1 = new Regex(@"'bPlus'D*('d*)'b", RegexOptions.IgnoreCase);
foreach (Match m in r1.Matches(tester)) Console.WriteLine(m.Groups[1]);
}
在这种情况下,m.Group[0]是原始字符串内容,而m.Group[1]是在正则表达式中指定的分组。
可能这将有助于短Regex,它将获取任何字符串中的数字作为后缀。
'bPlus'D+('d*)
这是演示
如果你使用Regex,那么你可以用上面提到的正则表达式得到$1中的数字。
List<string> words = new List<string> { "PlusContent", "PlusArchieve", "PlusContent1", "PlusArchieve1" };
foreach (string tester in words)
{
Regex r1 = new Regex(@"'bPlus'D+('d*)", RegexOptions.IgnoreCase);
foreach (Match m in r1.Matches(tester))
{
//Console.WriteLine(m);
if (!string.IsNullOrEmpty(Regex.Replace(tester, @"'bPlus'D+('d*)", "$1")))
Console.WriteLine(Regex.Replace(tester, @"'bPlus'D+('d*)", "$1"));
}
}