我想建立一个正则表达式字符串给予另一个字符串。例如,给定:构建一个正则表达式:替换一些'?'整数等于'?'的数目?
*FILE???.LOG
我想是与替换字符 '*' \ w +和人物???与\ w {数}?,即:
\w+FILE\w{3}.LOG
我知道一个简单的替换()可以采取的 '*' 照顾。我真正遇到的问题是更换?。 我试图做的是分裂以这样的方式串,我就能够知道序列的开始和结束索引?。 (例如,我试图使用的正则表达式之一是[^ \ x3F]但在某些情况下,我得到了错误的答案。)
目前我正在用蛮力取代它,检查每个字符以查看它是否是问号。当它不是时,我只是将该字符附加到一个新的字符串。当它是时,我开始计算问号序列的长度,直到序列结束。当它发生时,我将\ w {number of?}添加到新的String中,依此类推。在算法结束时,我的输出是一种新的字符串,格式是我想要的。
我相信这个算法是O(n)的,但我不知道是否有这样做使用正则表达式这种替换,这将是更便宜,易于实现的任何方式,或是否有这样做的另一个更有效的方法。
其他例子:
INPUT || OUTPUT
------------------------------------------------------
??FILE.L??? || \w{2}FILE.L\w{3}
??plugin??.L* || \w{2}plugin\w{2}.L\w+
plugin.L?? || plugin.L\w{2}
monitor???.??? || monitor\w{3}.\w{3}
pl???ugin??*.L??? || plu\w{3}ugin\w{2}\w+.L\w{3}
*???.L? || \w+\w{3}.L\w{1}
PS:我使用的Java 。
正则表达式比for..loop的成本更低/效率更低,并且在使用循环的同时,如果不是更多,它将会很难维持正则表达式匹配。只需查看@ stribizhev的答案,它是否比循环questionmark计数器更复杂或更简单? –
的确,@LouisRicci ......我会检查一下。谢谢您的回复! –