She*_*har 7 c# regex performance c#-2.0
我有一个很长的正则表达式.我的正则表达式是大约5000或更多短语的组合.
此外,我正在执行正则表达式的文本也很庞大.文字大小约为5kb.
因为正则表达式和输入文本都是巨大的,所以执行正则表达式至少需要2分钟,这在我的项目中是不可接受的.
所以,我想知道如何优化这一点.我能想到的一种方法是拆分正则表达式并使用多个线程来最小化执行时间.这是正确的选择还是有其他方法吗?
我的正则表达式的一部分看起来像这样:
(ACS | ADDR.com Technologies | ADP private limited | ADP | ADP India private limited | AIT Software Services PTE limited | AMK Technologies private limited | ANMSoft Technologies private limited | ANZ Information Technology private limited | ASD Global India private Limited | ASD India private有限公司| ASM Technologies私人有限公司| AXA集团解决方案印度私人有限公司| AXA技术印度有限公司| Aarkay Infonet私人有限公司| AbsolutData研究与分析私人有限公司|埃森哲印度私人有限公司|埃森哲服务印度|埃森哲服务有限公司|埃森哲服务私人有限公司|埃森哲|埃森哲软件私人有限公司| Accurum India私人有限公司| AceTechnologies公司| Aclat公司| AcmeCeeYess Softech私人有限公司| Adaequare印度私人有限公司| Adaequare私人有限公司| Adea International私人有限公司| Adea Technologies | Adeptra | Aditi Technologies | Adobe Systems | Adroit商业解决方案| Adroit和Claretdene Infotech私人有限公司| Affron Infotech | Agile Software Enterpri se private limited |安捷伦科技国际私人有限公司| Akebono Soft Technologies私人有限公司| AkebonoSoft Technologies私人有限公司| Akmin Technologies | Algorhythm Technologies私人有限公司| Allsec Technologies私人有限公司| Alphonso Informex私人有限公司| Altria客户服务| Altruist India私人有限公司| Amdocs | Amdocs开发中心印度私人有限公司| Amdocs开发中心印度|美国CyberSystems |美国运通服务印度私人有限公司|美国证券交易所| Amrok证券| Anish信息技术私人有限公司| Ankhnet Informations private limited | Apex Technologies private limited | AppLabs | AppLabs Technologies有限公司| Appshark印度| Apptix软件私人有限公司| Aquila Technologies | Arcot R和D软件私人有限公司| Arsin Systems私人有限公司| Ascendum Solutions私人有限公司| AskMe Software私人有限公司| Atos Origin私人有限公司| Atos Origin | Atos Origin India私人有限公司| Aurigo软件技术p rivate limited | Aurona Technologies私人有限公司| Autopower软件解决方案| Aztecsoft | BMC Software印度私人有限公司| Balasai Net私人有限公司| Bayon Solutions私人有限公司| Beachwood Computing Limited | Birlasoft有限公司| Blue Bird Technologies私人有限公司| Blue Fountain Media私人有限公司|蓝色Star InfoTech | Boden Inc |波士顿| Braahamam Net Solutions私人有限公司| Braahmam Net Solutions私人有限公司| Brain Soft技术私人有限公司| Brigade Corporation Private Limited | Business Link Automation印度私人有限公司| BusinessLink Automation私人有限公司| C Ahead Info Technologies India私人有限公司| CDI Corporation | CCG India private limited | CEM解决方案| CGI信息系统和管理顾问私人有限公司| CGI信息系统私人有限公司| CGI信息系统和管理顾问私人有限公司| CGI信息和管理私人有限公司| CGI Netvorks | CISCO Systems India private有限公司| CMC Limited | COMSYS Inc | CORE SHELL TECHNOLOGIE S | CRC Software India私人有限公司| CRV Executive Search private Limited | CS Software Solutions private Limited | CSC India private Limited | CSS Corp私人有限公司|剑桥解决方案有限公司|剑桥解决方案|剑桥解决方案有限公司 有限公司| Candor Ind.私人有限公司| Candor India私人有限公司| Canvas Creatives私人有限公司| Canvera | Capgemini Business Service India Limited | Capgemini private)
我正在使用C#这个东西.
请指教!!!!
你可以通过\b在开头预先添加来大大提高这个正则表达式的性能:
\b(ACS| ... |Z)
Run Code Online (Sandbox Code Playgroud)
这将阻止检查每个字符,并检查每个字.
一种优化是提取公共前缀.改变发生的事情
(This is some text|This is some other text)
Run Code Online (Sandbox Code Playgroud)
至
This is some (text|other text)
Run Code Online (Sandbox Code Playgroud)
这也应该在每个级别上完成.改变发生的事情
ABCD|ADCB|BACD|BADC|BCAD|BCDA|BDAC|BDCA|CABD
Run Code Online (Sandbox Code Playgroud)
至
A(BCD|DCB)|B(A(CD|DC)|C(AD|DA)|D(AC|CA))|CABD
Run Code Online (Sandbox Code Playgroud)
这种优化使得Regex引擎不必多次测试相同的字符.
它可以通过对阶段进行排序,并查看连续的元素来实现.小心不要拆分元字符.你不想在中间分裂.*或\..
另一种方法是使用Trie结构来查找前缀.这更加强大,但有点复杂.
| 归档时间: |
|
| 查看次数: |
3611 次 |
| 最近记录: |