我有一个文本文件,其中包含带有换行符的文字。我将该文本文件读入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”
答案 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)
完全符合您的需要。