Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用C从字符串中拆分变量数据#_C# - Fatal编程技术网

C# 如何使用C从字符串中拆分变量数据#

C# 如何使用C从字符串中拆分变量数据#,c#,C#,有人能帮我改进这部分代码吗 字符串如下:当前每小时价格(HOEP):$20.09/MWh(2.01美分/kWh)。这是网站上的一行,其中数据为20.09和2。01时间内的变化 static void get_HOEP(string web) { int x = web.IndexOf("Current Hourly Price"); ... } 我只想显示如下内容:当前每小时价格:2.01美分/kWh 感谢您的帮助有很多问题没有答案,但您可以简单地执行以下操作。当然,假设格式始

有人能帮我改进这部分代码吗

字符串如下:当前每小时价格(HOEP):$20.09/MWh(2.01美分/kWh)。这是网站上的一行,其中数据为20.09和2。01时间内的变化

static void get_HOEP(string web)
{
    int x = web.IndexOf("Current Hourly Price");
    ...
}
我只想显示如下内容:当前每小时价格:2.01美分/kWh


感谢您的帮助

有很多问题没有答案,但您可以简单地执行以下操作。当然,假设格式始终保持不变。:)


不过,我建议您使用更干净的工具,比如使用编译过的正则表达式。与正则表达式相比,有许多方法可以提高性能,并且在格式(例如格式)因某种原因发生更改时更容易进行更新。

有许多未回答的问题,但您可以简单地执行类似操作。当然,假设格式始终保持不变。:)


不过,我建议您使用更干净的工具,比如使用编译过的正则表达式。与正则表达式相比,有许多方法可以提高性能,并且在格式(例如格式)因某种原因发生更改时更容易更新。

使用正则表达式,结果将在变量结果中

var source="Current Hourly Price (HOEP): $20.09/MWh (2.01¢/kWh)";
var regex=new Regex(@"Current Hourly Price \(HOEP\): \$\d+\.\d\d/MWh \((\d+\.\d\d)¢/kWh\)");
var result=regex.Replace(source,"Current Hourly Price $1 ¢/kWh");
--编辑—完整类版本

public static class PriceParser {

  private const string MATCH_STRING = @"Current Hourly Price \(HOEP\): \$\d+\.\d\d/MWh \((\d+\.\d\d)¢/kWh\)";
  private const string REPLACE_STRING = @"Current Hourly Price $1 ¢/kWh";
  private static readonly Regex regex=new Regex(MATCH_STRING,RegexOptions.Compiled);
  private static readonly Regex entirePageRegex=new Regex(string.Format("^.*{0}.*$",MATCH_STRING),RegexOptions.Compiled|RegexOptions.Singleline);

  public static void get_HEOP1(string web) {
    Console.WriteLine(regex.Replace(web,REPLACE_STRING));
  }

  public static void get_HEOP2(string web) {
    Console.WriteLine(entirePageRegex.Replace(web,REPLACE_STRING));
  }
}
PriceParser.get\u HEOP1(web)
只需替换搜索字符串中的匹配项


PriceParser.get_HEOP2(web)
用替换字符串替换web的完整性

使用正则表达式,结果将在变量result中

var source="Current Hourly Price (HOEP): $20.09/MWh (2.01¢/kWh)";
var regex=new Regex(@"Current Hourly Price \(HOEP\): \$\d+\.\d\d/MWh \((\d+\.\d\d)¢/kWh\)");
var result=regex.Replace(source,"Current Hourly Price $1 ¢/kWh");
--编辑—完整类版本

public static class PriceParser {

  private const string MATCH_STRING = @"Current Hourly Price \(HOEP\): \$\d+\.\d\d/MWh \((\d+\.\d\d)¢/kWh\)";
  private const string REPLACE_STRING = @"Current Hourly Price $1 ¢/kWh";
  private static readonly Regex regex=new Regex(MATCH_STRING,RegexOptions.Compiled);
  private static readonly Regex entirePageRegex=new Regex(string.Format("^.*{0}.*$",MATCH_STRING),RegexOptions.Compiled|RegexOptions.Singleline);

  public static void get_HEOP1(string web) {
    Console.WriteLine(regex.Replace(web,REPLACE_STRING));
  }

  public static void get_HEOP2(string web) {
    Console.WriteLine(entirePageRegex.Replace(web,REPLACE_STRING));
  }
}
PriceParser.get\u HEOP1(web)
只需替换搜索字符串中的匹配项



PriceParser.get_HEOP2(web)
用替换字符串替换web的完整性

如果您知道输入的语法,可以使用正则表达式。语法是固定的吗?为什么不使用一个常规的express来提取您想要的部分呢?我已经运行了您的代码,它将为您的输入字符串显示“当前每小时价格:2.01美分/千瓦时”。如果您将Substring(x,100)更改为Substring(x),您应该更具体地了解输入表达式。它是否总是以“当前小时价格”开头?它是否总是以相同的形式出现:
“AA BB CC(DDDD):EEEE(FFFF)”
?最后一个括号中是否有不同的单位?尝试显示多个测试输入,以澄清程序在其他情况下的行为,可能是一些“边缘情况”和“可能得到的最差输入”。在解决计算机问题时,只有一个(特定的)示例通常是不够的。谢谢!该程序每隔1秒从网站上读取当前价格。由于这个原因,我没有使用正则表达式……如果你知道输入的语法,你可以使用正则表达式。语法是固定的吗?为什么不使用一个常规的express来提取您想要的部分呢?我已经运行了您的代码,它将为您的输入字符串显示“当前每小时价格:2.01美分/千瓦时”。如果您将Substring(x,100)更改为Substring(x),您应该更具体地了解输入表达式。它是否总是以“当前小时价格”开头?它是否总是以相同的形式出现:
“AA BB CC(DDDD):EEEE(FFFF)”
?最后一个括号中是否有不同的单位?尝试显示多个测试输入,以澄清程序在其他情况下的行为,可能是一些“边缘情况”和“可能得到的最差输入”。在解决计算机问题时,只有一个(特定的)示例通常是不够的。谢谢!该程序每隔1秒从网站上读取当前价格。由于这个原因,我没有使用正则表达式……我相信
web
参数包含整个网页(HTML)。这就是OP决定使用一小块(
web.Substring(x100);
)的原因。除此之外,它应该工作得很好。谢谢!然而,它不是这样工作的…
是的!它包含htmlAh yea,在查看了更有意义的原始代码之后。;)我觉得这是个奇怪的问题。^^如果你要解析整个网页,我个人会选择Bob Vale推荐的东西。你可以用逻辑来分解整个页面,但这似乎比它值得付出的努力更多。你必须考虑到网页可能在某个时间点发生变化,而当发生这种情况时更新逻辑并不总是最容易的。我相信<>代码> Web>代码>参数包含整个网页(HTML)。这就是OP决定使用一小块(
web.Substring(x100);
)的原因。除此之外,它应该工作得很好。谢谢!然而,它不是这样工作的…
是的!它包含htmlAh yea,在查看了更有意义的原始代码之后。;)我觉得这是个奇怪的问题。^^如果你要解析整个网页,我个人会选择Bob Vale推荐的东西。你可以用逻辑来分解整个页面,但这似乎比它值得付出的努力更多。你必须考虑到网页可能在某个时间点发生变化,当发生这种情况时更新逻辑并不总是容易的。谢谢!若你们看一下这个问题,你们会发现20.09和2.01会在一段时间内发生变化。所以,这样做是行不通的。。。谢谢你想说可能是正则表达式匹配?是吗?@make-你说他们在时间内改变是什么意思?在某处创建正则表达式,并将其保存在字段/变量中,然后每次您想要使用它时,都使用答案的最后一行:结果将包含在时间内转换的文本更改(即根据市场需求)。。。所以20.09和2.01不是常数,而是可变的。谢谢@那你为什么不能用正则表达式替换呢?谢谢!若你们看一下这个问题,你们会发现20.09和2.01会在一段时间内发生变化。所以,这样做是行不通的。。。谢谢你想说可能是正则表达式匹配?是吗?@make-你说他们在时间内改变是什么意思?在某处创建正则表达式并将其保存在字段/变量中,然后每次使用它时都使用最后一个li