我需要根据言语之前和之前的其他一些词语得到一些词语! 假设我有一个字符串:
not me and you but me and no you but me not
这样输出应为:
not me
and no
no you
me not
简单来说,我希望得到没有的词,而不是在特定词之后或之前得到的词! 我正在尝试:
String regex = "(?i)%s\\s+([\\S]+)\\s+([\\S]+)";
Matcher m = Pattern.compile(String.format(regex, Pattern.quote("no"))).matcher("not me and you but me and no you but me not");
while (m.find())
{
System.out.println(m.group(1));
}
答案 0 :(得分:0)
我认为两个正则表达式适合吗?一个选择任何单词,然后选择否:/\w+( no| not)/g
和一个用于选择否或不选择任何单词:/(no |not )\w+/g
答案 1 :(得分:0)
尝试以下
(?<=no|not)\w+
这将匹配no
或not
\w+(?=no|not)
这将匹配no
或not
之后的字词。
现在结合这两个可能是你想要的。
(?<=no|not)\w+(?=no|not)
答案 2 :(得分:0)
更复杂的解决方案可能看起来像
public void getWords(){
String str = "I have not used no water but the water not used by me and no sea not but water no!";
String[] words = str.split(" +|\t+|!");//split by space, tab and exclamation mark
int currentPos = 0;
int len = words.length;
List<String> matchedWords = new ArrayList<String>();
for(int i=0;i<len;i++){
if("no".equals(words[i])||"not".equals(words[i])){
if(currentPos!=i-1&&i-1>=0)//so we leave out duplicate words
matchedWords.add(words[i-1]);
if(i+1<len-1)
matchedWords.add(words[i+1]);//
currentPos = i+1;
}
}
for(String s : matchedWords)
System.out.println(s);
}
输出
have, used, water, water, used, and, sea, but, water,
我使用了你原来的句子,你在此期间已经改变了。