我的文件中有以下文字
<td class="toc-subitem-num"></td>
<td class="toc-title">Section 170 Text</td>
<td class="toc-subitem-num"></td>
<td class="toc-title">
<span class="font-style-italic">Section 170A Text</span>
</td>
我想捕获Section <number>
部分,我正在使用下面的正则表达式。
<td class="toc-subitem-num"></td>[\r\s\n]*<td class="toc-title">([\r\s\n]*<span class=\"font-style-italic\">)?Section ([0-9]+)([A-Z]+)?
搜索工作正常,但在替换中我希望这个数字出现在第一个标签中,我使用的替换如下所示。
<td class="toc-subitem-num">Section $1$2$3</td><td class="toc-title">
我当前的o / p:
<td class="toc-subitem-num">Section 170</td><td class="toc-title"> Text</td>
<td class="toc-subitem-num">Section
<span class="font-style-italic">170A</td><td class="toc-title"> Text</span>
预期的O / p:
<td class="toc-subitem-num">Section 170</td><td class="toc-title"> Text</td>
<td class="toc-subitem-num">Section 170A</td>
<td class="toc-title"><span class="font-style-italic"> Text</span>
请让我知道我是怎么做的。
由于
答案 0 :(得分:1)
为了解决这个问题,您需要确保捕获组的顺序为:
spark.conf.set("spark.sql.shuffle.partitions", 42)
请参阅此处的功能性问责:https://regex101.com/r/fS9lC3/3
捕捉第2组和第3组现在总是返回你想要的内容。
/<td class="toc-subitem-num"><\/td>[\s]*<td class="toc-title">[\s]*(<span class=\"font-style-italic\">)?(Section [\d]+[A-Z]*)? ([\w ]+)(<\/span>\s+)?(<\/td>)/gi
答案 1 :(得分:0)
您可以使用3个捕获组并移动第3个
str = str.replace(/(<td class="toc-subitem-num">)(<\/td>\s*<td class="toc-title">\s*(?:<span class="font-style-italic">)?)(Section\s*[0-9]+[A-Z]*)\s*/g, "$1$3$2");