C# Reg ex以固定字符串开始,以可变数字结束

C# Reg ex以固定字符串开始,以可变数字结束,c#,regex,C#,Regex,我需要匹配这些以固定字符串开头的字符串这些主控形状是使用创建的,以变量[space][name][space][char][number]结尾 These masters were created using Kevin O014 These masters were created using Jhon A039 These masters were created using Geeth P034 These masters were created using Jemes M077 The

我需要匹配这些以固定字符串开头的字符串
这些主控形状是使用
创建的,以变量
[space][name][space][char][number]结尾

These masters were created using Kevin O014
These masters were created using Jhon A039
These masters were created using Geeth P034
These masters were created using Jemes M077
These masters were created using Anne H058
These masters were created using JANE S345
有什么想法吗

我尝试了此
^(这些主控形状是使用创建的)。\s.[a-zA-Z]。\s.[a-zA-Z]。[0-9]{3}。$
。这对我来说简直是希腊语

我会用这个:

These masters were created using [a-zA-Z]+ [a-zA-Z]\d+

  • [a-zA-Z]+
    匹配名称(假设,简单名称,无
    -
    ,无重音字符)
  • [a-zA-Z]\d+
    匹配后跟任意数字的字母。如果您正好需要3位数字,可以更改为
    [a-zA-Z]\d{3}

string input=@“这些主机是使用Smith J054创建的
”; Regex Regex=new Regex(@“这些主控项是使用[a-zA-Z]+([a-zA-Z]\d+)创建的); foreach(regex.Matches中的匹配(输入)) { Console.Out.WriteLine(“找到匹配项:+match”); 如果(match.Groups.Count>=2) Console.Out.WriteLine(“提取”+match.Groups[1].Value); }
输出:

找到一个匹配项:这些母版是使用Smith J054创建的

提取物J054

我会用这个:

These masters were created using [a-zA-Z]+ [a-zA-Z]\d+

  • [a-zA-Z]+
    匹配名称(假设,简单名称,无
    -
    ,无重音字符)
  • [a-zA-Z]\d+
    匹配后跟任意数字的字母。如果您正好需要3位数字,可以更改为
    [a-zA-Z]\d{3}

string input=@“这些主机是使用Smith J054创建的
”; Regex Regex=new Regex(@“这些主控项是使用[a-zA-Z]+([a-zA-Z]\d+)创建的); foreach(regex.Matches中的匹配(输入)) { Console.Out.WriteLine(“找到匹配项:+match”); 如果(match.Groups.Count>=2) Console.Out.WriteLine(“提取”+match.Groups[1].Value); }
输出:

找到一个匹配项:这些母版是使用Smith J054创建的

提取物J054


不仅要验证,而且要在最后获取名称和代码,您可以使用

\bThese masters were created using (?<Name>[A-Za-z]+)\s+(?<Code>[A-Za-z][0-9]{3})\b

如果
(?[A-Za-z]+)
匹配任何1+ASCII字母并将其捕获到名为“name”的组中,
\s+
匹配一个或多个空格,
(?
[A-Za-z][0-9]{3})
匹配并捕获到组“code”中的字母后面紧跟着3位数字(使用
+//code>而不是
{3}
匹配一个或多个数字)

请注意,
\b
是有助于将较大字符串中的字符串作为整个单词进行匹配的单词边界

在C#中:

:

使用系统;
使用System.IO;
使用System.Linq;
使用System.Text.RegularExpressions;
公开课考试
{
公共静态void Main()
{
var s=“aaaaa这些母版是使用Kevin O014创建的\n这些母版是使用Jhon A039创建的\n这些母版是使用Geeth P034创建的\n这些母版是使用Jemes M077创建的\n这些母版是使用Anne H058创建的\n这些母版是使用JANE S345 AAAA创建的”;
var matches=Regex.matches(s,@“\b这些主机是使用(?[A-Za-z]+)\s+(?[A-Za-z][0-9]{3})\b)创建的)
.Cast()
.Select(m=>string.Format(“{0}:{1}”,m.Groups[“Name”].Value,m.Groups[“Code”].Value))
.ToList();
Console.WriteLine(string.Join(“\n”,匹配项));
}
}

要不仅验证,而且要在最后获取名称和代码,您可以使用

\bThese masters were created using (?<Name>[A-Za-z]+)\s+(?<Code>[A-Za-z][0-9]{3})\b

如果
(?[A-Za-z]+)
匹配任何1+ASCII字母并将其捕获到名为“name”的组中,
\s+
匹配一个或多个空格,
(?
[A-Za-z][0-9]{3})
匹配并捕获到组“code”中的字母后面紧跟着3位数字(使用
+//code>而不是
{3}
匹配一个或多个数字)

请注意,
\b
是有助于将较大字符串中的字符串作为整个单词进行匹配的单词边界

在C#中:

:

使用系统;
使用System.IO;
使用System.Linq;
使用System.Text.RegularExpressions;
公开课考试
{
公共静态void Main()
{
var s=“aaaaa这些母版是使用Kevin O014创建的\n这些母版是使用Jhon A039创建的\n这些母版是使用Geeth P034创建的\n这些母版是使用Jemes M077创建的\n这些母版是使用Anne H058创建的\n这些母版是使用JANE S345 AAAA创建的”;
var matches=Regex.matches(s,@“\b这些主机是使用(?[A-Za-z]+)\s+(?[A-Za-z][0-9]{3})\b)创建的)
.Cast()
.Select(m=>string.Format(“{0}:{1}”,m.Groups[“Name”].Value,m.Groups[“Code”].Value))
.ToList();
Console.WriteLine(string.Join(“\n”,匹配项));
}
}

^这些母版是使用[[a-zA-z\S]*[[a-zA-z0-9]创建的*$


使用在线计算器上的多行确保匹配。

^这些主控形状是使用[[a-zA-z\S]*[[a-zA-z0-9]创建的*$


使用在线计算器上的多行确保匹配。

是否需要验证或从这些字符串中提取任何内容?是否只需要使用英文名称,或任何国际名称(例如包含
ё
等字母)?是的,我需要提取最后四个字符
[char][number]
.FYI:我使用的是C#。我只需要使用英语。我已经修改了我的答案,以更好地满足您的要求。我仍然希望使用命名捕获组。您需要验证或从这些字符串中提取任何内容吗?您只需要使用英语名称或任何国际名称吗(例如,包含像
ё
这样的字母)也是吗?是的,我需要提取最后四个字符
[char][number]
.FYI:我使用的是C#。我只需要使用英语。我已经修改了我的答案,以更好地满足您的要求。我仍然希望使用命名的捕获组。它与使用Smit创建的这些主控程序不匹配
using System;
using System.IO;
using System.Linq;
using System.Text.RegularExpressions;

public class Test
{
    public static void Main()
    {
        var s = "aaaaaa These masters were created using Kevin O014\nThese masters were created using Jhon A039\nThese masters were created using Geeth P034\nThese masters were created using Jemes M077\nThese masters were created using Anne H058\nThese masters were created using JANE S345 aaaaa";
        var matches = Regex.Matches(s, @"\bThese masters were created using (?<Name>[A-Za-z]+)\s+(?<Code>[A-Za-z][0-9]{3})\b")
                    .Cast<Match>()
                    .Select(m=> string.Format("{0}: {1}", m.Groups["Name"].Value, m.Groups["Code"].Value))
                    .ToList();
        Console.WriteLine(string.Join("\n", matches));
    }
}