如何在String中查找char模式偏移量

时间:2012-09-04 17:03:17

标签: java regex

我有一个文本文件,其中包含带有换行符的文字。我将该文本文件读入String

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

我想知道模式的偏移(即开始和结束字符索引),例如 [有些单词以cap开头] v。[有些单词以cap开头]

或者 [有些单词以cap开头]与[有些单词以cap开头]

以上例子 “State v.USA”=> 开始= 11,结束= 22

“美国诉。  NY“=> 开始= 36,结束= 45

我开始使用类似http://rubular.com/r/T7Ii2WDADw之类的内容,而不是涵盖所有情况。

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

这将是一个有效的正则表达式:\w+\s+vs?[.]\s+\w+

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

答案 2 :(得分:1)

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