3

Notepad++ を使用して、長くて乱雑な HTML テーブルをクリーンアップしています。また、正規表現を使用しようとしています。

特定の値を含まないすべてのテーブル行を削除する必要があります (その部分文字列と呼んでもよろしいですか?)。

すべてのファイルの内容をラップ解除した後、次の正規表現を使用して、すべての内容を含むすべてのテーブル行を 1 つずつ選択することができました。

<tr>.+?</tr>

substring<td>を定義したテーブルの行の一部を含む行のみを選択して置き換えるために、正規表現を改善するにはどうすればよいですか?

これが問題になるかどうかはわかりませんが、すべてのテーブル行の構造は次のとおりです (すべての HTML タグを配置しました。ドットは標準のコンテンツ/値を表します)

<tr>
    <td> ... </td>
    <td> ... </td>
    <td> <a sfref="..." href="...">!! SUBSTRING I HAVE TO MATCH HERE !!</a> </td>
    <td> <img /> </td>
    <td> ... </td>
    <td> ... </td>
    <td> ... </td>
    <td> ... </td>
</tr>
4

1 に答える 1

6

正規表現ソリューションは完璧ではないため、単純なDOMパーサーを含むプログラミング言語で小さなスクリプトを作成する必要があります。

また、あなたの質問は私には少し矛盾しているようです。まず、特定の部分文字列を含まないすべての行を削除するとします。次に、特定の部分文字列を含むすべての行を一致させたいと言います。

とにかく、ここに両方の​​場合の正規表現の間に合わせの解決策があります。SUBSTRING行内で確実に発生するには、次を使用する必要があります。

<tr>((?!</tr>).)+?SUBSTRING.+?</tr>

(?!...)ネガティブな先読みです。Notepad ++ 6より前ではサポートされていない可能性があるため、必ず更新してください。先読みは、次の行を見つけるためだけに、1つのテーブル行の終わりを超えないようにしますSUBSTRING。これは、+?繰り返しのすべての文字について、の始まりをマークしないことを表明することによって行われます</tr>

それSUBSTRINGが行内で発生しないようにするために、SUBSTRINGすでに持っているネガティブな先読みを単純に入れることができます。

<tr>((?!SUBSTRING).)+?</tr>

タグに空白を追加したり、開始タグに属性を追加したりすると、両方のソリューションが崩れ始めることに注意してください。そのため、DOMパーサーを使用したソリューションを強くお勧めします。

于 2012-11-13T16:55:01.087 に答える