在sublimetext2中使用正则表达式替换

时间:2013-04-28 23:25:40

标签: regex sublimetext2

我想使用正则表达式(最好是在sublimetext2中)来替换以下内容:

<td class="etword">et alfabet</td>
<td class="etword">&nbsp;</td>

用这个:

<td class="etword">et alfabet</td>
<td class="etword"><?php audioButton("../../audio/words/et_alfabet","et_alfabet");?></td>

非常感谢!

2 个答案:

答案 0 :(得分:2)

Sublime Text

找到:

<td class="etword">(.*?)</td>\n<td class="etword">&nbsp;</td>

替换为

<td class="etword">$1</td>\n<td class="etword"><?php audioButton("../../audio/words/$1","$1");?></td>

这将填充第二个表格单元格。但是在URL中,如果第一个单元格中有空格,则会有空格。不幸的是,正则表达式不能这样做,因此我们必须使用Sublime Text的其他一些功能来完成它。

搜索(CTRL + F)audioButton\(".*?\);并点击“全部查找”。这样,所有audioButton - 调用都将被选中。然后,在不单击任何其他内容的情况下,再次打开搜索/替换面板(CTRL + H)并将(空格字符)替换为_(下划线)。确保激活“在选择中” -option。然后点击“全部替换”,一切都应该没问题。

答案 1 :(得分:0)

使用像HTMLAgility http://htmlagilitypack.codeplex.com/

这样的HTML解析器可以更轻松地完成此类活动

以最好的方式讲课。我认为你想要捕获第一个etword内部文本并将其拉入替换字段。

我确信这可以在崇高中重写。在powershell中,我将通过以下方式实现这一目标:

$Matches= @()
$String =  '<td class="etword">et alfabet</td>
<td class="etword">&nbsp;</td>'

# find the value in the preceding cell. if there arn't any matching strings then skip
if ($String -imatch '<td[^>]*class="etword"[^>]*?>([^<]*?)</td>[\s\n]*?<td[^>]*class="etword"[^>]*?>&nbsp;</td>' ) {
    $FoundText = $Matches[1]
    $WholeMatchingString = $Matches[0]
    write-host "Found Text: " $FoundText
    write-host "WholeMatchingString: " $WholeMatchingString

    # create a new string with the desired values, by replacing &nbsp; with the correct text
    $NewString = $WholeMatchingString -replace "&nbsp;", $('<?php audioButton("../../audio/words/' + $FoundText + '","' + $FoundText + '");?>')
    Write-Host "NewString: " $NewString 

    # replace the whole matcing string with the New string
    $String = $String -replace $WholeMatchingString, $NewString
    Write-Host "Result: " $String
} # end if

产生以下输出:

Found Text:  et alfabet
WholeMatchingString:  <td class="etword">et alfabet</td><td class="etword">&nbsp;</td>
NewString:  <td class="etword">et alfabet</td><td class="etword">&nbsp;</td>
Result:  <td class="etword">et alfabet</td><td class="etword"><?php audioButton("../../audio/words/et alfabet","et alfabet");?></td>

在powershell中,$ Matches数组会自动填充最后一个-match操作的结果。