正则表达式替换问号的问题

时间:2016-08-09 12:58:16

标签: regex

我的文件中有以下文字

    <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>

请让我知道我是怎么做的。

由于

2 个答案:

答案 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");