在Dreamweaver中进行RegEx查找/替换 - 将HTML粘贴为变量?

时间:2014-04-22 19:58:19

标签: html regex excel replace dreamweaver

我必须将电子表格数据(名称,图像名称和生物)转换为HTML,因此我使用RegEx查找/替换DW中的变量,这很容易。问题是,一列包含HTML(主要是段落和斜体)的生物,而RegEx忽略了#34;行"超出我的研究能力的原因。

我不想剥离然后再次手动添加HTML,所以请指示我!

TL; DR:有没有办法将HTML粘贴为RegEx变量?


这里有一些示例表数据,我可以快速粘贴/格式化为Excel:

<tr>
  <td>James Brian Hellwig</td>
  <td>James_Brian_Hellwig</td>
  <td><p>Lorem ipsum dolor sit amet, <em>consectetur adipisicing</em> elit. Sunt, ut iste tempore laborum aperiam nostrum obcaecati neque natus adipisci fugit. </p>
  <p>Dolores, eligendi animi ea totam nobis cumque ullam eveniet accusamus!</p></td>
</tr>
<tr>
  <td>Jiminy Cricket</td>
  <td>Jiminy_Cricket</td>
  <td><p>Lorem ipsum dolor sit amet, <em>consectetur adipisicing</em> elit. Sunt, ut iste tempore laborum aperiam nostrum obcaecati neque natus adipisci fugit. </p>
  <p>Dolores, eligendi animi ea totam nobis cumque ullam eveniet accusamus!</p></td>
</tr>

在这里&#34;发现&#34;正则表达式:

<tr>
  <td>([^<]*)</td>
  <td>([^<]*)</td>
  <td>([^<]*)</td>
</tr>

在这里&#34;替换&#34;正则表达式:

<div>
  <img class="floatleft" src="$2.jpg" alt="$1" />
  <h2 class="name">$1</h2>
  $3
</div>

我会亲吻或为第一个人买啤酒来回答这个问题。你的选择。

3 个答案:

答案 0 :(得分:1)

您的问题是[^<]*匹配除开口尖括号以外的任何内容。总的来说这是个好主意,所以你不会在标签边界上意外匹配,但在这种情况下很不幸,因为<p>后面有<td>标签<td>标签。 1}}。

因此,我提出了一个不同的解决方案。允许其他代码,而不是<td>代码中的<tr> <td>((?:(?!</?td)[\s\S])*)</td> <td>((?:(?!</?td)[\s\S])*)</td> <td>((?:(?!</?td)[\s\S])*)</td> </tr> 代码:

(?:         # Start non-capturing group that matches...
 (?!</?td)  # (unless we're at the start of a <td> or </td> tag)
 [\s\S]     # ... any character (whitespace or non-whitespace).
)*          # Repeat as needed

<强>解释

{{1}}

答案 1 :(得分:0)

您可以使用

<tr>
  <td>.*?</td>
  <td>.*?</td>
  <td>.*?</td>
</tr>

说明:(点)匹配除换行符之外的任何字符。如果你需要多行,你可以像Tim建议的那样使用 [\ s \ S]

*使其找到0个或更多(点)。 让那个不情愿,这意味着我们尽可能抓住FEW字符,同时仍然匹配END TD TAG。

由于TR和TD标记之间有空格,我们必须在正则表达式中包含它。对不起,我应该早点抓住这个!此外,除非我们正在搜索空格,否则我们无法在正则表达式中添加空格,这就是为什么正则表达式看起来像一连串复杂的字符。这是它应该是什么样子:

<tr>\s*<td>.*?</td>\s*<td>.*?</td>\s*<td>.*?</td>\s*</tr>

如您所见,我使用 \ s 表示空格字符,后跟*表示0次或更多次。

由于你有相同的模式重复3次,你实际上可以使用以下表示法重复:

<tr>\s*(<td>.*?</td>\s*){3}</tr>

重复表示法很棒。例如,让我们说,您不仅希望将表格与3个TD匹配,而且还希望匹配具有1到4个TD的表格。你会用:

<tr>\s*(<td>.*?</td>\s*){1,4}</tr>

答案 2 :(得分:0)

仅供参考,同事通过使用Dreamweaver XSLT文件动态地将XML数据添加到HTML,在上面的示例中找到了使用RegEx的绝佳替代方法。我们只是使用XML映射的电子表格来导出XML并更新内容......

设置电子表格的架构并使用适当的HTML“重复区域”格式化XSL文件后,它就会顺利进行。

<强>资源: