0

このような改行文字を含むテキストを含むテキストファイルがあります。そのテキストファイルを文字列に読み込みます

random Text
State v. USA
some more text
USA v.
NY
Some more text
USA
v.LA ,  MN v. ND
USA vs. MN

[大文字で始まる単語] v. [大文字で始まる単語]のようなパターンのオフセット (つまり、開始文字インデックスと終了文字インデックス) を知りたいです。

または [大文字で始まる単語] vs. [大文字で始まる単語]

上記の例では、「State v. USA」 => Start=11 and End=22

"USA v. NY" => Start=36 and End=45

私はこのhttp://rubular.com/r/T7Ii2WDADwのようなものから始めましたが、これはすべてのケースをカバーしていません。

そのため、プログラムは、キーが Start+","+End で、値が "State v. USA" のような実際のテキストである Map を返すことができます。

4

3 に答える 3

2

両方のケースをカバーするには、この正規表現を使用する必要があります。

\w+\s((v.)|(vs.))\s\w+

Java コードで。

import java.util.regex.Pattern;
import java.util.regex.Matcher;

public class Testapp {

public static void main(String[] args) {
String text = "USA v. Russia \n Some other text \n India vs. Aus";
String regex="\\w+\\s((v.)|(vs.))\\s\\w+";
Pattern p = Pattern.compile(regex);
Matcher matcher = p.matcher(text);

while (matcher.find()) {
    System.out.println(matcher.group()+ ":" +"start =" + matcher.start() + " end = " + matcher.end());
}
}
}

出力:

Starting & ending index ofUSA v. Russia:start=0 end = 13
Starting & ending index ofIndia vs. Aus:start=34 end = 47
于 2012-09-04T17:24:38.300 に答える
2

これは有効な正規表現になります。\w+\s+vs?[.]\s+\w+

次に、 を使用して、 と を使用しMatcher.find()て各一致の開始と終了を取得できます。Matcher.start(0)Matcher.end(0)

于 2012-09-04T17:28:15.243 に答える
1

メソッドString.indexOf(String)はまさに必要なことを行います。

于 2012-09-04T17:05:51.577 に答える