如何做一个更好的算法(带有变量名称的大列表)



公司名称变化很大,所以我添加了很多或条件。

也许有人用正则表达式来做到这一点?

im将 im 需要的值存储在不同的组中。

感谢您的任何帮助!

我只从文本中添加了一部分,完整的文本要大!希望这对未来有所帮助!该链接包含完整列表。

Unternehmen;象征;Valorennummer;土地;商事局;商展平台;Indexzugehörigkeit;纸画;内恩维尔特;布兰奇;Kotierungs-segment;Rechnungslegungsnorm;Nächste Generalversammlung;Primär-kotiert; 3M公司;嗯;1405105;我们;瑞士法郎;XSWX; ;RS;0.00; ;国际报告准则; ; ;假; 5EL SA;菲尔;632685;CH;瑞士法郎;XSWX; ;理学学士;40.00;股权投资工具;国际报告准则;国际财务报告准则; ;真; ABB有限公司;阿布恩;1222171;CH;瑞士法郎;XVTX;SMI,SPI,SLCI,SMIEXP,SLI;RS;0.12;工业工程;国际报告准则;美国公认会计原则;13.04.17;真; 雅培实验室;阿布特;903037;我们;瑞士法郎;XSWX; ;RS;0.00; ;国际报告准则; ; ;假; 艾伯维公司;ABBV;20145667;我们;瑞士法郎;XSWX; ;RS;0.00; ;国际报告准则; ; ;假; 亚库控股股份公司;阿昆;136633;CH;瑞士法郎;XSWX;斯皮,斯皮克,斯皮克斯;RS;10.00;家居用品;瑞士报告准则;瑞士公认会计原则; ;真; 阿克特利昂有限公司;ATLN;1053247;CH;瑞士法郎;XVTX;SMI,SPI,SLCI,SLIFE,SBIOM,SMIEXP,SLI;RS;0.50;制药与生物技术;国际报告准则;美国公认会计原则;05.04.17;真; Addex Therapeutics Ltd;ADXN;2985075;CH;瑞士法郎;XSWX;斯皮,斯皮克,斯皮克斯;RS;1.00;制药与生物技术;国际报告准则;国际财务报告准则; ;真; 德科集团股份公司;亚丁;1213860;CH;瑞士法郎;XVTX;SMI,SPI,SLCI,SMIEXP,SLI;RS;1.00;支持服务;国际报告准则;美国公认会计原则;20.04.17;真; Adval Tech Holding AG;ADVN;896792;CH;瑞士法郎;XSWX;斯皮,斯皮克,斯皮克斯;RS;20.00;工业工程;瑞士报告准则;瑞士公认会计原则;18.05.17;真; 艾维斯维多利亚SA;AEVS;1248819;CH;瑞士法郎;XSWX;SPI,SSCI,SPIEX,SLIFE,SBIOM;RS;5.00;医疗保健设备和服务;瑞士报告准则;瑞士公认会计原则;13.06.17;真; 艾利西斯;艾尔;1094762;CH;瑞士法郎;XSWX;斯皮,斯皮克,斯皮克斯;RS;0.25;个人物品;国际报告准则;《国际财务报告准则》;12.06.17;真; Airopack技术集团股份公司;艾恩;24260694;CH;瑞士法郎;XSWX;斯皮,斯皮克,斯皮克斯;RS;5.00;技术硬件和设备;瑞士报告准则;瑞士公认会计原则;10.05.17;真; 全实控股股份公司;阿伦;883756;CH;瑞士法郎;XSWX;SPI,SMCI,SPIEX;RS;50.00;房地产;Immobiliengesellschaften;《国际财务报告准则》;21.04.17;真; 高山精选股份公司;阿尔卑斯山;1919955;CH;瑞士法郎;XSWX; ;RS;0.02;股权投资工具;Investmentgesellschaften;《国际财务报告准则》;22.05.17;真; 阿尔皮克控股公司;阿尔夫;3438970;CH;瑞士法郎;XSWX; ;RS;10.00;电力;国际报告准则;《国际财务报告准则》;18.05.17;真; 还有控股公司;阿尔森;2459027;CH;瑞士法郎;XSWX;斯皮,斯皮克,斯皮克斯;RS;1.00;技术硬件和设备;国际报告准则;《国际财务报告准则》;21.03.17;真; 阿尔廷股份公司;备选方案;1442452;CH;美元;XSWX; ;RS;0.03;股权投资工具;Investmentgesellschaften;国际财务报告准则; ;真; 艾迈斯半导体;AMS;24924656;在;瑞士法郎;XSWX;SPI,SMCI,SPIEX,SMIM,SMIEXP;理学学士;0.00;技术硬件和设备;国际报告准则;《国际财务报告准则》;09.06.17;真; 英美资源集团;AAM;3186826;国标;瑞士法郎;XSWX; ;RS;0.55; ;国际报告准则; ; ;假; APG SGA SA;APGN;1910702;CH;瑞士法郎;XSWX;SPI,SMCI,SPIEX;RS;2.60;媒体;瑞士报告准则;瑞士公认会计原则;23.05.17;真; 阿博尼亚股份公司;ARBN;11024060;CH;瑞士法郎;XSWX;斯皮,斯皮克,斯皮克斯;RS;4.20;建筑与材料;国际报告准则;《国际财务报告准则》;28.04.17;真; 阿伦德尔股份公司;阿隆;227101;CH;瑞士法郎;XSWX;斯皮,斯皮克,斯皮克斯;RS;9.50;房地产;国际报告准则;《国际财务报告准则》;19.09.17;真; 阿瑞兹塔股份公司;阿林;4323836;CH;瑞士法郎;XVTX;SPI,SMCI,SPIEX,SMIM,SMIEXP,SLI;RS;0.02;食品生产商;国际报告准则;《国际财务报告准则》;06.12.17;真; Ascom Holding AG;ASCN;1133920;CH;瑞士法郎;XSWX;SPI,SMCI,SPIEX;RS;0.50;技术硬件和设备;瑞士报告准则;瑞士公认会计原则;19.04.17;真; 欧拓控股股份公司;奥特恩;12748036;CH;瑞士法郎;XSWX;SPI,SMCI,SPIEX;RS;0.05;汽车及零部件;国际报告准则;《国际财务报告准则》;30.03.17;真; 巴赫姆控股公司;班布;1253020;CH;瑞士法郎;XSWX;SPI,SSCI,SPIEX,SLIFE;RS;0.05;制药与生物技术;瑞士报告准则;瑞士公认会计原则;24.04.17;真; 贝克休斯公司;比希;910918;我们;瑞士法郎;XSWX; ;RS;1.00; ;国际报告准则; ; ;假; 博洛伊斯控股公司;巴尔恩;1241051;CH;瑞士法郎;XVTX;SPI,SMCI,SPIEX,SMIM,SMIEXP,SLI;RS;0.10;非人寿保险;国际报告准则;《国际财务报告准则》;28.04.17;真;银行合作社;OCV1811647;CH;瑞士法郎;XSWX;斯皮,斯皮克,斯皮克斯;理学学士;20.00;银行;瑞士报告准则;班肯塞茨;20.04.17;真; 林斯银行法学学士股份公司;林恩;130775;CH;瑞士法郎;XSWX;斯皮,斯皮克,斯皮克斯;RS;20.00;银行;瑞士报告准则;班肯塞茨;20.04.17;真; 日内瓦州立银行;BCGE;35049471;CH;瑞士法郎;XSWX;斯皮,斯皮克,斯皮克斯;RS;50.00;银行;瑞士报告准则;班肯塞茨;25.04.17;真; 汝拉州立银行;BCJ;3299134;CH;瑞士法郎;XSWX;斯皮,斯皮克,斯皮克斯;理学学士;14.00;银行;瑞士报告准则;班肯塞茨;27.04.17;真; 沃多瓦兹州立银行;BCVN;1525171;CH;瑞士法郎;XSWX;SPI,SMCI,SPIEX;RS;10.00;银行;瑞士报告准则;班肯塞茨;27.04.17;真; 银行专业管理有限公司;BPDG;249229;CH;瑞士法郎;XSWX;斯皮,斯皮克,斯皮克斯;理学学士;1.00;一般金融;瑞士报告准则;班肯塞茨;26.04.17;真; 巴里嘉利宝股份公司;谷仓;900296;CH;瑞士法郎;XSWX;SPI,SMCI,SPIEX,SMIM,SMIEXP;RS;7.29;食品生产商;国际报告准则;《国际财务报告准则》;13.12.17;真; 巴塞尔州银行;BLKB;147355;CH;瑞士法郎;XSWX;SPI,SMCI,SPIEX;个人电脑;100.00;银行;瑞士报告准则;班肯塞茨;03.04.17;真; 巴斯夫欧洲公司;低音;11450563;德;瑞士法郎;XSWX; ;RS;0.00; ;国际报告准则; ; ;假; Basilea Pharmaceutica AG;BSLN;1143244;CH;瑞士法郎;XSWX;SPI,SMCI,SPIEX,SLIFE,SBIOM;RS;1.00;制药与生物技术;国际报告准则;美国公认会计原则;27.04.17;真; 巴斯勒坎托纳尔银行;BSKP;923646;CH;瑞士法郎;XSWX;斯皮,斯皮克,斯皮克斯;个人电脑;8.50;银行;瑞士报告准则;班肯塞茨;27.04.17;真; 百特国际公司;巴克斯;911702;TSZ瑞士法郎;XSWX; ;RS;1.00; ;国际报告准则; ; ;假; BB生物技术股份公司;生物;3838999;CH;瑞士法郎;XSWX;斯利夫,斯比奥姆;RS;0.20;制药与生物技术;Investmentgesellschaften;《国际财务报告准则》;16.03.17;真; 搏力谋控股股份公司;豆;150319;CH;瑞士法郎;XSWX;
(w+sw+sw+.w+.|w+sw+sw+sw+.w+.|w+sw+sw+.|w+sw+s&sw+sw+|w+sw+-w+-w+sw+|w+sw+sw+sw+sw+|w+sw+sw+sw+|w+sw+sw+|w+sw+);s(w+);s(d+);s(w+);s(w+);s(w+);

https://regex101.com/r/IfBFIL/1

您的数据看起来非常一致,第 15 项始终是公司名称:

List<string> items = new List<string>();
int count = 0;
foreach (string s in yourData.Split(';')) {
count++;
if (count == 15) {
items.Add(s);
count = 1;
}
}
MessageBox.Show(string.Join(Environment.NewLine, items.ToArray()));    

我认为,这个正则表达式至少对眼睛来说稍微容易一些(恐怖!),并且似乎可以解析数据:

(?<company>.*?);(?<prefix>.*?);.(?<number>d*?);(?<code1>.*?);(?<code2>.*?);(?<code3>.*?);.*$

*我们利用数据用分号很好地分隔的事实,我们想要第一个"无论多少"字段 - 每个连续且(几乎)相同的命名匹配组表示。

.*?与"贪婪"版本相同:.*,但它从匹配 none 开始(而不是全部),然后根据需要匹配更多。

正则表达式101

它是公司、日期(可选)、数字(可选)和布尔值的列表 - 全部用";"分隔

所以...用';'拆分,然后过滤一个简单的正则表达式以排除已知的非公司名称值:

Regex excludeRegex = new Regex(@"[d.]+|true|false", RegexOptions.IgnoreCase);
string dataString = "asd;sdfsdf;f fff; 123.231; true; abb";
List<string> companies = dataString.Split(';',StringSplitOptions.RemoveEmptyEntries)
.Select(c=>c.Trim())
.Where(c=>!excludeRegex.IsMatch(c))
.Distinct()
.ToList();

看起来像一个模式。

101 演示

(?m)^s*([^;]+?)s*;s*([^;]+?)s*;s*([^;]+?)s*;s*([^;]+?)s*;s*([^;]+?)s*;s*([^;]+?)s*;(?=.*?(?:true|false);)

(?m)
^ s* 
( [^;]+? )                    # (1)
s* ; s* 
( [^;]+? )                    # (2)
s* ; s* 
( [^;]+? )                    # (3)
s* ; s* 
( [^;]+? )                    # (4)
s* ; s* 
( [^;]+? )                    # (5)
s* ; s* 
( [^;]+? )                    # (6)
s* ;
(?=
.*? 
(?: true | false )
;
)

相关内容

  • 没有找到相关文章

最新更新