好的,所以我已经在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,依此类推。
我如何构建第一,第二和第三个正则表达式?我可以在那里工作......
这些数字显然是唯一可以改变的部分。其余的将在任何时候保持不变。
答案 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>$)
答案 2 :(得分:0)
我会删除html(s /&lt; [^&gt;] *&gt; // g),然后用换行符替换逗号和空格,然后在换行符上展开()字符串。结果将是字符串中所有数字的数组。
答案 3 :(得分:0)
好的,我现在找到了合适的答案。这是我正在使用的:
<(?:[\s\S]+)>(?:.+?\n){4}(-?\d+)\,(-?\d+)\,(-?\d+)[\s\S]*
要转到下一行,我只需将{4}增加到{5},然后我为该行获得三个捕获组:$ 1 $ 2和$ 3。这感觉就像一个比以前更好的解决方案(并且实际上适合我需要进入的盒子里面,直到发布我之前的答案太长了之后我才意识到这一点。)