我希望这不是重复...
我需要一个正则表达式才能做一个相当简单的任务。我有HTML表格的代码,我希望在表格的第一行中使用<td>
代码替换所有<th>
代码,即在第一组<tr>
{{1}内}标签。该表可能如下所示:
</tr>
我希望:
<table cellpadding="5" cellspacing="0" border="1">
<tr>
<td>Capacity %</td>
<td>Tension V</td>
<td>Acid kg/l</td>
</tr>
<tr>
<td>100</td>
<td>12.70</td>
<td>1.265</td>
</tr>...etc
我尝试过与此类似的正则表达式:
<table cellpadding="5" cellspacing="0" border="1">
<tr>
<th>Capacity %</th>
<th>Tension V</th>
<th>Acid kg/l</th>
</tr>
<tr>
<td>100</td>
<td>12.70</td>
<td>1.265</td>
</tr>...etc
...然后尝试使用后引用重建表行,但我似乎无法将正则表达式应用于多个 &LT; / TD&GT; 可能存在的匹配。
我在javascript中这样做,这意味着我不能使用后视镜(虽然如果有人看看后面的解决方案我仍然有兴趣看到它...)。
提前感谢您的帮助。
答案 0 :(得分:1)
如果你的正则表达式引擎在lookbehind断言中支持无限重复,你可以这样做,例如在.NET(C#)中:
resultString = Regex.Replace(subjectString,
@"(?<= # Assert that we can match this before the current position:
<table # <table
(?: # followed by...
(?! # (unless there's an intervening
</table # </table
| # or
</tr # </tr)
) # (End of lookahead assertion)
. # any character
)* # any number of times
) # (End of lookbehind assertion)
<td # Then match <td",
"<th", RegexOptions.Singleline | RegexOptions.IgnorePatternWhitespace);
适用于您的示例。但即使在.NET中,我也不会使用正则表达式,它太脆弱了。更好地直接操纵DOM,这就是它的用途。
答案 1 :(得分:0)
单个正则表达式无法做到这一点。由于正则表达式基本上是逐行工作的,并且你有一个特殊的条件(“只在第一个”),你需要编写一些条件逻辑和正则表达式来使它工作。