0

我有这样的文本文件,其中包含带有换行符的文本。我将该文本文件读入字符串

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

我想知道模式的偏移量(即开始和结束字符索引),例如[Some word started with cap] v. [Some word beginning with cap]

或者 [一些以大写开头的词] vs. [一些以大写开头的词]

对于上面的例子 "State v. USA" => Start=11 and End=22

“美国诉纽约” =>开始 = 36 和结束 = 45

我从http://rubular.com/r/T7Ii2WDADw之类的东西开始,它并不涵盖所有情况。

因此,程序可以返回一个 Map,其中键是 Start+","+End,值是实际文本,例如 "State v. USA"

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+

然后,使用,您可以使用andMatcher.find()获取每场比赛的开始和结束。Matcher.start(0)Matcher.end(0)

于 2012-09-04T17:28:15.243 回答
1

方法String.indexOf(String)完全符合您的需要。

于 2012-09-04T17:05:51.577 回答