C# 正则表达式:获取id的列表
我需要从字符串中获取id列表。字符串的正则表达式如下所示:C# 正则表达式:获取id的列表,c#,regex,C#,Regex,我需要从字符串中获取id列表。字符串的正则表达式如下所示: "GET_LIST( [A-Za-z0-9]{5,10}){0,100}"; 当我发送如下字符串时: GET_LIST 1000 10001 10002 我希望获得类似于的“10000 10001 10002”或更好的id列表。但当我尝试使用匹配项获取此id时。组[1]。值 我只有最后一个身份证 我的代码实际上是这样的: public IList<string> ExctractListId(string comman
"GET_LIST( [A-Za-z0-9]{5,10}){0,100}";
当我发送如下字符串时:
GET_LIST 1000 10001 10002
我希望获得类似于的“10000 10001 10002”
或更好的id列表。但当我尝试使用匹配项获取此id时。组[1]。值代码>
我只有最后一个身份证
我的代码实际上是这样的:
public IList<string> ExctractListId(string command)
{
IList<string> id = new List<string>();
Match matches = new Regex(ReponseListeService).Match(command);
if (matches.Success)
{
string ids = matches.Groups[1].Value;
Console.WriteLine(ids);
return id;
}
return id;
}
public IList extractListId(字符串命令)
{
IList id=新列表();
Match matches=新正则表达式(reponListService).Match(命令);
如果(匹配。成功)
{
字符串ID=matches.Groups[1]。值;
控制台写入线(ids);
返回id;
}
返回id;
}
我知道代码不完全正确,实际上我只想得到一个列表或一个包含所有id的字符串
此代码用于家庭作业,我不能使用,Split(),Concat()
我怎么能有这个 您正在搜索的数据包含空白。因此,在正则表达式中添加空白
或\s
,然后重试
希望这有帮助
对不起,我不能完全理解这个问题
一个使用Javascript的小代码段
function getId(data){
var regex = /^GET_LIST(([\d\s]{5,10}){0,100})/g;
var match = regex.exec(data);
console.log(match[1]);
}
你可以用
private static string pattern = @"^GET_LIST(?:\s+([A-Za-z0-9]{4,10})){0,100}$";
private static List<string> ExtractListId(string command)
{
return Regex.Matches(command, pattern)
.Cast<Match>().SelectMany(p => p.Groups[1].Captures
.Cast<Capture>()
.Select(t => t.Value)
)
.ToList();
}
private静态字符串模式=@“^GET_LIST(?:\s+([A-Za-z0-9]{4,10})){0100}$”;
私有静态列表ExtractListId(字符串命令)
{
返回Regex.Matches(命令、模式)
.Cast().SelectMany(p=>p.Groups[1]。捕获
.Cast()
.选择(t=>t.Value)
)
.ToList();
}
请参阅和。结果:
详细信息
^
-匹配字符串的开头
GET_LIST
-文字子字符串
(?:\s+([A-Za-z0-9]{4,10})){0100}
-0到100次
\s+
-1+空格
([A-Za-z0-9]{4,10})
-捕获组1:4到10个字母数字ASCII字符
$
-字符串结束
注意,我们在量化的非捕获组(?:…){0100}
中有一个捕获组(([a-Za-z0-9]{4,10})
)。要获取这些值,您应该访问组捕获集合。由于组ID为1,您需要获取match.Groups[1]
并访问其所有捕获 您还可以使用String.Split()
方法以空格字符分割字符串,然后返回所有可解析为int
的项。请注意,这将返回所有有效整数项,因此它将用于示例输入,但如果您有其他类型的输入,则可能需要进行一些修改
public static IList<string> ExctractListId(string command)
{
if (command == null || !command.StartsWith("GET_LIST"))
{
return new List<string>();
}
int temp;
return command.Split().Where(item => int.TryParse(item, out temp)).ToList();
}
输出
您的示例与您的问题不匹配。也许让我们看看你尝试了什么,这样我们就可以告诉你它在哪里被破坏了。你有什么理由不能只做var-ids=str.Split(“”).Skip(1).ToList()代码>?我总是使用string.Split()
对于这样简单的事情,@itsme86有正确的方法如果你真的只需要从这个精确格式的字符串中获得结果,请使用@Wiktor Stribiżew,谢谢你的帮助,它工作得非常好!加入社区很好,但是只有当你有明确的答案时,你才应该发布答案。这更多的是一个评论,不幸的是,你还没有代表发表评论。试着回答一些你能完全回答的问题,或者问一些问题来建立自己的声誉。谢谢你的建议。我会记住的,我只是想帮忙。
private static void Main()
{
Console.WriteLine(string.Join(", ", ExctractListIds("GET_LIST 1000 10001 10002")));
GetKeyFromUser("\nDone! Press any key to exit...");
}