如何匹配整个字符串以将其替换为其组件?

时间:2014-12-02 00:12:34

标签: regex string

好的,所以我已经在regexr.com上摆弄了很长一段时间,而且我现在仍然没有快乐。

这是我的样本数据:

<html><body><p>7792,783,5365514 -1,1,-1 6329,46,72141 -1,1,-1 8595,42,49104 -1,1,-1 14386,21,5026 6172,52,128182 6311,51,114826 9108,43,51437 8257,24,7050 5289,55,169099 -1,1,-1 15667,26,8919 29,79,1861956 32,83,2681719 4595,32,16506 8469,22,6113 -1,1,-1 -1,1,-1 -1,1,-1 7912,50,102981 -1,1,-1 6951,15,2579 -1,1,-1 4830,46,70571 6617,24,7553 -1,-1 -1,-1 -1,-1 -1,-1 -1,-1 -1,-1 -1,-1 -1,-1 -1,-1 -1,-1 -1,-1 -1,-1 -1,-1 -1,-1 -1,-1 -1,-1 -1,-1 -1,-1 -1,-1 -1,-1 -1,-1 -1,-1 </p></body></html>

我想要做的是用每个数字替换整个字符串。所以...我将运行正则表达式一次,并用7792替换该字符串。然后再次运行它并替换为783.再次运行它,替换为5365514,依此类推。

我如何构建第一,第二和第三个正则表达式?我可以在那里工作......

这些数字显然是唯一可以改变的部分。其余的将在任何时候保持不变。

4 个答案:

答案 0 :(得分:0)

好的,所以我终于找到了一个解决方案,虽然它显然不是最好的。我仍然想知道是否有人有比这更好的选择,但发布这个以便它可能在某处有用吗?

这是我的正则表达式:

<(?:[\s\S]+)>-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s-?(\d+)\,-?(\d+)\s.*

然后我有125个小组用来替换我认为适合我的目的。 :)它在Regexr中运行:http://regexr.com/3a0cm

答案 1 :(得分:0)

这是您使用此模式的125场比赛

(?:<html><body><p>|\G[, ])\K(-?\d+)(?=.*<\/p><\/body><\/html>$)

http://regex101.com/r/yW4aZ3/146

答案 2 :(得分:0)

我会删除html(s /&lt; [^&gt;] *&gt; // g),然后用换行符替换逗号和空格,然后在换行符上展开()字符串。结果将是字符串中所有数字的数组。

答案 3 :(得分:0)

好的,我现在找到了合适的答案。这是我正在使用的:

<(?:[\s\S]+)>(?:.+?\n){4}(-?\d+)\,(-?\d+)\,(-?\d+)[\s\S]*

要转到下一行,我只需将{4}增加到{5},然后我为该行获得三个捕获组:$ 1 $ 2和$ 3。这感觉就像一个比以前更好的解决方案(并且实际上适合我需要进入的盒子里面,直到发布我之前的答案太长了之后我才意识到这一点。)

http://regexr.com/3a0e3