2

重複の可能性:
正規表現のサブジェクト文字列で空白を無視するには?

私は以下を使用しています:

"<a href=\"(.+?)\">(.+?)</a>"

合わせる:

"<a href="x">xx</a>"

ただし、ユーザーが次のように入力することがあります。

"<a   href="x" >xx</a>"
"<a href="x">xx</a>"
"<a href="x"   >xx</a>"

上記の 3 つの文字列の 1 つまたは複数のスペースに一致するように正規表現を変更するにはどうすればよいですか?

4

4 に答える 4

2

\s*1つの解決策は、空白が合法であるが必須ではない\s+場所、および空白が必要な場所に次のように追加することです。

<a\\s+href\\s*=\\s*\"([^\"]*)\"\\s*>([^<]*)</a>

一方、これはまさに、正規表現を使用してXMLまたはHTMLを解析しようとすべきではない理由の例です。これは単に仕事にとって間違ったツールです。.NETで利用可能ないくつかのXML解析手法のいずれかを使用すると、はるかに優れた代替手段が提供されます。

于 2012-12-20T15:24:56.543 に答える
0

ネガティブ先読みアサーションを使用して、(?!\s)空白がある場合は一致しないようにすることができます...

<a (?!\s)href=\"(?!\s)(.+?)\"(?!\s)>(?!\s)(.+?)</a>

しかし、これを追加する必要がある回数から、これに正規表現を使用することはおそらく正しいアプローチではないことがわかります。

于 2012-12-20T15:25:04.107 に答える
0

必要な記号はです+。1つ以上のスペースに一致します。

<a +href=\"(.+?)\" *>(.+?)</a>

ただし、正規表現を介してhtmlを解析することは、一般的に悪い考えです。

于 2012-12-20T15:25:10.180 に答える
0

これは少しファンキーで、おそらく最高ではありませんが、ここに行きます:

string.Join(" ", s.Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries))

編集:(正規表現ではないことはわかっています)

于 2012-12-20T15:25:54.460 に答える