1

ここに問題があります:

split=re.compile('\\W*')

この正規表現は、正規表現を処理する場合は問題なく機能しますが、のような単語を含む表現が必要になる場合がありますkäyttäj&aml;auml;

&;文字を含めるには、正規表現に何を追加する必要がありますか?

4

4 に答える 4

6

エンティティを 1 つの単位として扱います (数値文字コードを含めることもできるため)。結果として、次の正規表現が得られます。

(\w|&(#(x[0-9a-fA-F]+|[0-9]+)|[a-z]+);)+

これは一致します

  • 単語文字 (「<code>_」を含む)、または
  • で構成される HTML エンティティ
    • 文字「<コード>&」、
      • 文字「<code>#」、
        • 文字「<code>x」の後に少なくとも 1 つの 16 進数が続く、または
        • 少なくとも 1 桁の 10 進数、または
      • 少なくとも 1 文字 (= 名前付き実体)、
    • セミコロン
  • 少なくとも一度は。

/編集: エラーを指摘してくれたΤΖΩΤΖΙΟΥ に感謝します。

于 2008-09-30T08:34:52.487 に答える
5

おそらく、問題を逆にしたいと思うでしょう。つまり、スペースのないすべての文字を見つけることです。

[^ \t\n]*

または、余分な文字を追加したい:

[a-zA-Z0-9&;]*

HTMLエンティティを照合する場合は、次のようにしてみてください。

(\w+|&\w+;)*
于 2008-09-30T08:26:18.873 に答える
2

余分な文字を含む文字クラスを作成する必要があります。例えば:

split=re.compile('[\w&;]+')

これでうまくいくはずです。ご参考までに

  • \w(小文字の「w」) は、単語の文字 (英数字) に一致します。
  • \W(大文字の W) は、否定された文字クラスです (英数字以外の文字に一致することを意味します)。
  • *0 回以上+一致し、1 回以上一致するため、*何にでも一致します (そこに文字がなくても)。
于 2008-09-30T08:33:37.420 に答える
-1

この正規表現がうまくいったようです:

split=re.compile('(\\\W+&\\\W+;)*')

提案をありがとう。それらのほとんどは Reggy で問題なく動作しましたが、なぜ失敗したのかよくわかりませんre.compile

于 2008-09-30T09:00:19.447 に答える