首先,我正在使用下面的函数从pdf文件中读取数据。
public string ReadPdfFile(string fileName)
{
StringBuilder text = new StringBuilder();
if (File.Exists(fileName))
{
PdfReader pdfReader = new PdfReader(fileName);
for (int page = 1; page <= pdfReader.NumberOfPages; page++)
{
ITextExtractionStrategy strategy = new SimpleTextExtractionStrategy();
string currentText = PdfTextExtractor.GetTextFromPage(pdfReader, page, strategy);
currentText = Encoding.UTF8.GetString(ASCIIEncoding.Convert(Encoding.Default, Encoding.UTF8, Encoding.Default.GetBytes(currentText)));
text.Append(currentText);
pdfReader.Close();
}
}
return text.ToString();
}
如您所见,所有数据都保存在字符串中。字符串如下所示:
label1: data1;
label2: data2;
label3: data3;
.............
labeln: datan;
我的问题:如何根据标签从字符串中获取数据? 我试过这个,但是我被卡住了:
if ( string.Contains("label1"))
{
extracted_data1 = string.Substring(string.IndexOf(':') , string.IndexOf(';') - string.IndexOf(':') - 1);
}
if ( string.Contains("label2"))
{
extracted_data2 = string.Substring(string.IndexOf("label2") + string.IndexOf(':') , string.IndexOf(';') - string.IndexOf(':') - 1);
}
答案 0 :(得分:3)
查看String.Split()
function,根据提供的字符数组标记字符串。
e.g。
string[] lines = text.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries);
现在遍历该数组并再次拆分每个
foreach(string line in lines) {
string[] pair = line.Split(new[] {':'});
string key = pair[0].Trim();
string val = pair[1].Trim();
....
}
显然检查空行,并在需要的地方使用.Trim()
...
[编辑] 或者作为一个很好的Linq声明......
var result = from line in text.Split(new[] {';'}, StringSplitOptions.RemoveEmptyEntries)
let tokens = line.Split(new[] {':'})
select tokens;
Dictionary<string, string> =
result.ToDictionary (key => key[0].Trim(), value => value[1].Trim());
答案 1 :(得分:1)
这是非常难编码的,但你可以使用这样的东西(稍微修剪一下你的需要):
string input = "label1: data1;" // Example of your input
string data = input.Split(':')[1].Replace(";","").Trim();
答案 2 :(得分:1)
您可以使用Dictionary<string,string>
,
Dictionary<string, string> dicLabelData = new Dictionary<string, string>();
List<string> listStrSplit = new List<string>();
listStrSplit = strBig.Split(';').ToList<string>();//strBig is big string which you want to parse
foreach (string strSplit in listStrSplit)
{
if (strSplit.Split(':').ToList<string>().Count > 1)
{
List<string> listLable = new List<string>();
listLable = strSplit.Split(':').ToList<string>();
dicLabelData.Add(listLable[0],listLable[1]);//Key=Label,Value=Data
}
}
dicLabelData包含所有标签的数据....
答案 3 :(得分:0)
我认为您可以使用regex来解决此问题。只需在断行上拆分字符串并使用正则表达式来获得正确的数字。
答案 4 :(得分:0)
您可以使用正则表达式来执行此操作:
Regex rx = new Regex("label([0-9]+): ([^;]*);");
var matches = rx.Matches("label1: a string; label2: another string; label100: a third string;");
foreach (Match match in matches) {
var id = match.Groups[1].ToString();
var data = match.Groups[2].ToString();
var idAsNumber = int.Parse(id);
// Here you use an array or a dictionary to save id/data
}