gpt4 book ai didi

C# Regex.Split - 子模式返回空字符串

转载 作者:太空狗 更新时间:2023-10-29 21:31:27 24 4
gpt4 key购买 nike

嘿,第一次在这个很棒的社区发帖。

我的 C# 应用程序中有一个正则表达式来解析变量的赋值:

NewVar = 40

在文本框中输入。我希望我的正则表达式返回(使用 Regex.Split)变量的名称和值,非常简单。这是我到目前为止的正则表达式:

var r = new Regex(@"^(\w+)=(\d+)$", RegexOptions.IgnorePatternWhitespace);
var mc = r.Split(command);

我的目标是在 Regex 中修剪空白,而不是使用返回值的 Trim() 方法。目前,它可以工作,但它在 MatchCollection 的开头返回一个空字符串,在结尾返回一个空字符串。

使用上面的输入示例,这是从 Regex.Split 返回的内容:

mc[0] = ""
mc[1] = "NewVar"
mc[2] = "40"
mc[3] = ""

所以我的问题是:为什么它在开头和结尾返回一个空字符串?

谢谢。

最佳答案

RegEx.Split 返回四个值的原因是您只有一个匹配项,因此 RegEx.Split 返回:

  • 匹配前的所有文本,即“”
  • 匹配中的所有 () 组,即“NewVar”和“40”
  • 匹配后的所有文本,即“”

RegEx.Split 的主要目的是提取匹配正则表达式之间的任何文本,例如,您可以使用带有“[,;]”模式的 RegEx.Split 以逗号或分号。在 NET Framework 1.0 和 1.1 中,Regex.Split 仅返回拆分值,在本例中为“”和“”,但在 NET Framework 2.0 中,它被修改为还包括在 Regex 中由 () 匹配的值,这就是为什么你根本看不到“NewVar”和“40”。

您要查找的是 Regex.Match,而不是 Regex.Split。它会做你想做的:

var r = new Regex(@"^(\w+)=(\d+)$");
var match = r.Match(command);
var varName = match.Groups[0].Value;
var valueText = match.Groups[1].Value;

请注意,RegexOptions.IgnorePatternWhitespace 意味着您可以在模式中包含额外的空格 - 它与匹配的文本无关。由于您的模式中没有多余的空格,因此没有必要。

关于C# Regex.Split - 子模式返回空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1735177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com