public static List <(String MoneyAmount, String MoneyCurrency)> SeekMoney(string OrgString) { OrgString = OrgString.Replace(" ", String.Empty); OrgString = OrgString.Replace("〇", "0"); OrgString = OrgString.Replace("○", "0"); //本次HTML的特殊处理 OrgString = OrgString.Replace("一", "1"); OrgString = OrgString.Replace("二", "2"); OrgString = OrgString.Replace("三", "3"); OrgString = OrgString.Replace("四", "4"); OrgString = OrgString.Replace("五", "5"); OrgString = OrgString.Replace("六", "6"); OrgString = OrgString.Replace("七", "7"); OrgString = OrgString.Replace("八", "8"); OrgString = OrgString.Replace("九", "9"); OrgString = OrgString.Replace("十", "10"); OrgString = OrgString.Replace("0", "0"); //本次HTML的特殊处理 OrgString = OrgString.Replace("1", "1"); OrgString = OrgString.Replace("2", "2"); OrgString = OrgString.Replace("3", "3"); OrgString = OrgString.Replace("4", "4"); OrgString = OrgString.Replace("5", "5"); OrgString = OrgString.Replace("6", "6"); OrgString = OrgString.Replace("7", "7"); OrgString = OrgString.Replace("8", "8"); OrgString = OrgString.Replace("9", "9"); var MoneyList = new List <(String MoneyAmount, String MoneyCurrency)>(); var LastIndex = 0; var detectString = OrgString; while (true) { bool IsCurrencyMark = false; detectString = detectString.Substring(LastIndex); var MoneyCurrency = String.Empty; //可能同时存在多个关键字,这里选择最前面一个关键字 var MinIdx = -1; foreach (var Currency in CurrencyList) { if (detectString.IndexOf(Currency) != -1) { if (MinIdx == -1) { MoneyCurrency = Currency; MinIdx = detectString.IndexOf(Currency); } else { if (MinIdx > detectString.IndexOf(Currency)) { MoneyCurrency = Currency; MinIdx = detectString.IndexOf(Currency); } } } } if (MoneyCurrency == String.Empty) { if (detectString.Contains("¥")) { IsCurrencyMark = true; MoneyCurrency = "人民币"; int currencyMarkIdx = detectString.IndexOf("¥"); for (int k = currencyMarkIdx + 1; k < detectString.Length; k++) { var s = detectString.Substring(k, 1); if (RegularTool.IsNumeric(s) || s == ",") { if (k == detectString.Length - 1) { LastIndex = k; break; } continue; } LastIndex = k; break; } } else { break; } } else { LastIndex = detectString.IndexOf(MoneyCurrency); } Regex rex = new Regex(@"^\d+"); var MoneyAmount = String.Empty; for (int i = LastIndex - 1; i >= 0; i--) { var SingleChar = detectString.Substring(i, 1); //惩 本次特殊处理 if (SingleChar == "." || SingleChar == "," || SingleChar == "," || SingleChar == "万" || SingleChar == "惩" || SingleChar == "亿" || rex.IsMatch(SingleChar)) { MoneyAmount = SingleChar + MoneyAmount; continue; } else { MoneyAmount = String.Empty; if (LastIndex == i + 1) { break; } MoneyAmount = detectString.Substring(i + 1, LastIndex - i - 1); MoneyAmount = Normalizer.NormalizeNumberResult(MoneyAmount); if (!rex.IsMatch(MoneyAmount)) { MoneyAmount = String.Empty; break; //暂时认为一定要有阿拉伯数字 } MoneyList.Add((MoneyAmount, MoneyCurrency)); MoneyAmount = String.Empty; break; } } if (MoneyAmount != String.Empty) { MoneyList.Add((MoneyAmount, MoneyCurrency)); } if (!IsCurrencyMark) { LastIndex += MoneyCurrency.Length; } else { //"¥"在字符串末尾的时候,如果不及时退出,会发生死循环! if (MoneyAmount == String.Empty) { break; } } } return(MoneyList); }
List <struHoldAfter> GetHolderAfter2ndStep() { var HoldList = new List <struHoldAfter>(); var keyword = new string[] { "增持后持股", "减持后持股" }; foreach (var table in root.TableList) { var HeaderRowNo = -1; var mt = new HTMLTable(table.Value); for (int RowCount = 1; RowCount <= mt.RowCount; RowCount++) { for (int ColumnCount = 1; ColumnCount < mt.ColumnCount; ColumnCount++) { var value = mt.CellValue(RowCount, ColumnCount); foreach (var key in keyword) { if (value.Contains(key)) { HeaderRowNo = RowCount; break; } } if (HeaderRowNo != -1) { break; } } if (HeaderRowNo != -1) { break; } } if (HeaderRowNo != -1) { //如果有5格 if (mt.ColumnCount != 5) { continue; } int PercentCol = -1; for (int rowno = HeaderRowNo + 1; rowno <= mt.RowCount; rowno++) { var value1 = mt.CellValue(rowno, 1); var Title4 = mt.CellValue(HeaderRowNo, 4); var value4 = mt.CellValue(rowno, 4); value4 = value4.Trim().Replace(",", String.Empty); value4 = value4.Trim().Replace(",", String.Empty); var Title5 = mt.CellValue(HeaderRowNo, 5).Replace(" ", ""); var value5 = mt.CellValue(rowno, 5); value5 = value5.Trim().Replace(",", String.Empty); value5 = value5.Trim().Replace(",", String.Empty); if (Title5.Contains("增持后持股比例(%)") || Title5.Contains("减持后持股比例(%)")) { PercentCol = 5; //Console.WriteLine(Title5); } if (PercentCol == 5 && !value5.Contains("%")) { value5 += "%"; } if (RegularTool.IsNumeric(value4) && RegularTool.IsPercent(value5)) { //Console.WriteLine("GetHolderAfter2ndStep:" + value1); HoldList.Add(new struHoldAfter() { Name = value1, Count = getAfterstock(Title4, value4), Percent = getAfterpercent(value5), Used = false }); continue; } } } } return(HoldList); }