9

XMLタグではないすべての「<」または「>」を見つけるには、正規表現が必要です。

例:

<tag1>W<E><E</tag1>Z<>S

見つける必要があります

<><<>

例:

<tag1>W<E><E</E></tag1>Z<>S

見つける必要があります

<<>

そのため、'<' または '>' がタグに含まれていないヒット (はい、考慮すべき自己終了タグもあります :)

編集 #2: 最後にやりたいことは、すべての一致を html エンコードされた値に置き換えることです。

編集#3:

したがって、私がやりたいことは、いくつかの追加タグ (既知のタグはほとんどありません) を含む HTML を含むテキストから、タグに含まれていないすべての '<' と '>' を取得することです。

例 (太字のものは見つけたいので、エンコードされた値に置き換えることができます):

<div>
  <a href="link">Link with < characters</a>
  <knownTag>Text with character ></knownTag>
  <knownTag>Text < again ></knownTag>
<div>

結果は次のようになります。

<div>
  <a href="link">Link with &lt; characters</a>
  <knownTag>Text with character &gt;</knownTag>
  <knownTag>Text &lt; again &gt;</knownTag>
<div>

この問題を解決する方法について何か考えはありますか?

4

7 に答える 7

3

This questionのいずれかの方法を使用し、入力のhtmlタグを削除します

それから

string output = new string(input.ToCharArray().Where(c=> c=='<'||c=='>').ToArray());
于 2013-06-09T17:34:46.097 に答える
2

あなたの例から判断すると、件名が示唆するように XML ファイルを検索しているようではなく、XML のようなファイルを検索しているようです。おそらく、探している「<」および「>」文字が含まれていない場合は XML になるファイルです。 .

しかし、タスクを十分に明確に指定していません。たとえば、何が起こるべきか

<tag1>xxxx</tag2>

または

<tag1><x a="</tag1>"/></tag1>

2 番目のケースを取り上げるのは、正規表現だけでは非常に困難 (おそらく不可能) です。受け入れる文法または入力言語 (XML の拡張) を定義し、再帰的な解析手法を使用して解析する必要があります。

于 2013-06-09T21:07:43.877 に答える
0
    static string test(string input)
    {
        var r = @"(<(.*?)>)(.*?)</\2>";
        while (Regex.IsMatch(input, r))
            input = Regex.Replace(input, r, "$3");
        return Regex.Replace(input, @"\w", "");
    }
于 2013-06-18T08:55:15.157 に答える
0

私はあなたの質問からあまり理解していませんでしたが、HTML の例を使用して、予想される HTML の結果と同じ HTML の結果を返すコードを書きました。

MatchCollection matches = Regex.Matches(YourHTML, @"(?<=<.*?>).+(?=<.*?>)");
foreach (Match match in matches)
{
    YourHTML = YourHTML.Replace(match.Value, HttpUtility.HtmlEncode(match.Value));
}
于 2013-06-11T20:26:48.607 に答える