我必须将电子表格数据(名称,图像名称和生物)转换为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>
我会亲吻或为第一个人买啤酒来回答这个问题。你的选择。
答案 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文件后,它就会顺利进行。
<强>资源:强>