3

一致をキャプチャするためにJavaの正規表現のフレーバーを使用するサードパーティのアプリを使用しています。残念ながら、アプリでは許可されていないため、正規表現検索を実行する前にhtmlドキュメントの先頭に何かを追加するJavaコードを実装することはできません。従来の方法ではなく、使用する価値のある機能がたくさんあります。そうでない場合は、そのようにします。

このHTMLドキュメントには文字通りタグのみが含まれていますが、新しい段落を指定するために使用されるタグ<br>に関係なく、各文の後に常にスペースがあります。<br>

htmlタグがあるため、これから始めましたが、気付く前に最初の単語をキャプチャしていませんでした。

[\s](.*?)[.!?]\s

その後、単語の境界で試してみましたが、うまくいきませんでしたが、一致するたびに「br>」を取得し始めました。

[\b](.*?)[.!?]\s

このようにして、空白や単語の境界から句読点まで、文の後に空白が続くすべてをキャプチャする必要があります。

これは、すべての異なるドキュメントで毎回ドキュメントの最初の単語を削除することを除いて、ドキュメント全体の1つおきの文に対して機能します。おそらく最初の単語の前に何も存在しないためですか?

これが最初からのサンプルテキストです:

The troll who who lived under the bridge was quite sad. He couldn't help from 
trolling without making others mad. He had no friends because of this, but he
could never stop. It made his constantly feel alone. No other soul would comfort
him. <br>

これは常に次のような文を返します。

troll who who lived under the bridge was quite sad
He couldn't help from trolling without making others mad
He had no friends because of this, but he could never stop
etc...

ご覧のとおり、最初の文の最初の文が欠落しています。

最初の単語の前には何も存在しないため、常に最初の単語が削除されます(少なくともこれは私が想定していることです)。

これを機能させるにはどうすればよいですか?

4

2 に答える 2

0

これが私がPHPでテストした1つの解決策です(ただし、Javaで利用できない正規表現機能を使用するべきではありません)。

/\b([^<>]*?)[.!?]\s/

文字列に含まれるHTMLタグは、文に含まれるのはどちらでもない<br>文字のみであると単純に言うことができます。そのために、私は単に(否定された文字クラス)に置き換えました。<>.*?[^<>]*?

于 2012-10-08T17:07:08.250 に答える
0

各単語の前に単語境界を必要とする正規表現を指定しています( [\b\s] ...)。そのため、単語の境界で始まらないテキストの場合、正規表現は最初の単語と一致しません。
代わりに使用してみてください"\\s+|\\w+|\\p{Punct}+"。空白のグループ(1)、文字や数字のグループ(2)、句読文字のグループ(3)に個別に一致します。

次のコードを使用したテスト:

Pattern p = Pattern.compile("\\s+|\\w+|\\p{Punct}+");
Matcher m = p.matcher("Hello world! How are you?");

int i=0;
while(m.find()){
  System.out.printf("[%02d] - %s",i,m.group());
  i++;
}

戻り値:

[00] - Hello
[01] -  
[02] - world
[03] - !
[04] -  
[05] - How
[06] -  
[07] - are
[08] -  
[09] - you
[10] - ?

アップデート:

単語(下位レベル)は同じ境界のいくつかを使用するため、テキストから文を抽出することは困難です。

特定の文によっては、正規表現ベースのソリューションを成功させることができる場合がありますが、Java、C、またはその他の「コンソール」言語を使用しないと、考えられるすべての文形式を処理できない可能性があります。

たとえば、現在のコードは、、または;で終わる文を処理し:ませ;%。しかし、解決策は正規表現で達成できます。

ただし、正規表現だけでは処理できない場合があります。特に、のような構成された文"\"I'll quit being a troll!\" - The troll said."

于 2012-10-08T17:29:23.497 に答える