c# - 稍微复杂的网页文本到变量解析
问题描述
我正在从网站获取文本并将其解析为变量。但是,我拉文本时得到的字符串有点复杂。网上好像是这样的。。。
Invoice #: 1267
Date: 4/16/2018 10:44:00 AM
PO #:
Reference:
Countermen: A/A
我遇到的问题是所有这些都是一个字符串。该字符串也会动态变化,因为某些订单输入了其他订单没有的文本。例如,有些订单的每个字段都已填写,而其他订单几乎没有字段填写。
Invoice #:
1267
<br>
Date:
4/16/2018 10:44:00 AM
<br>
PO #:
<br>
Reference:
<br>
Countermen:
A/A
这是我检查 Web 元素时显示的内容。
我想将信息解析为单独的字符串和整数以进行测试,并且我在处理字符串的整个“动态”部分时遇到了困难,因为有些字符串会更长,而有些字符串会更短。
如果有帮助,这里有一些实际网站的图片:
解决方案
假设:
- 数据键和值由
:
- 每个数据点由
<br>
给定您的样本数据:
using System;
using System.Collections.Specialized;
public class Program
{
public static void Main()
{
var str = @"Invoice #:
1267
<br>
Date:
4/16/2018 10:44:00 AM
<br>
PO #:
<br>
Reference:
<br>
Countermen:
A/A";
//Array containing "raw string data"
var raw = str.Split(new[]{"<br>"}, StringSplitOptions.RemoveEmptyEntries);
//Just using a simple NVC, opt for something else based on your needs
var kvp = new NameValueCollection();
//Go through the raw array we created earlier and
// add the key/value pairs to our NameValueCollection, kvp
Array.ForEach(raw, s =>
{
//Because of date/time, we'll restrict colon to first occurrence
var data = s.Split(new [] {":"}, 2, StringSplitOptions.None);
kvp.Add(data[0].Trim(), data[1].Trim());
});
/*
* At this point, we have our "parsed" data in
* key/value pairs, kvp and can use it as needed
*
*/
// We can loop through the kvp and simply display
foreach(string k in kvp.Keys){
Console.WriteLine("{0} = {1}", k, kvp[k]);
}
// We can assign values to variables we create
var invNum = kvp["Invoice #"];
}
}
输出:
Invoice # = 1267
Date = 4/16/2018 10:44:00 AM
PO # =
Reference =
Countermen = A/A
嗯...
推荐阅读
- javascript - 页面重新加载后如何在 jQuery ajax .done() 上保留(数据)值
- selenium - Selenium IDE - 将文件上传到字段中
- react-native - ImageBackground 不会出现
- python - 什么框架支持带有基本文本和多边形的简单全屏(即没有可见的镶边)应用程序?
- pyspark - 什么是 LabeledPoint RDD?如何在其中打印数据?
- java - 在为@PathParam 发送带有Url 中数据的反斜杠时,它将作为正斜杠
- javascript - 错误:无法调用 React.createContext,因为对象类型中缺少属性 createContext
- corda - 无法在 Corda 中启动流程 - java.lang.IllegalStateException:这只能在流程启动后完成
- c++ - 用 std::chrono 显示日、月和年?
- python - 如何使用 Python 找出两个数据框在列名方面的差异