我有一个文本字符串,如下所示:
word word word {{t:word word|word}} word word {{t:word|word}} word word...
我有兴趣提取所有以“{{t”开头并以“}}”开头的字符串。我不关心其余的事情。我事先并不知道“{{.. | ..}}”中的单词数量。如果它不是分隔内部单词的空格,那么在空间上分割文本就行了。我不确定如何编写正则表达式来完成这项工作。我考虑过运行文本,char by char,然后将所有内容存储在“{{t:”和“}}”之间,但是想知道更简洁的方法来做同样的事情。
谢谢!
修改 上述预期产出:
字符串数组String[] a
,其中a[0]
为{{t:word word|word}}
且a[1]
为{{t:word|word}}
。
答案 0 :(得分:3)
使用java.util.regex.*
包在这里创造奇迹
Pattern p = Pattern.compile("\\{\\{t(.*?)\\}\\}");//escaping + capturing group
Matcher m = p.matcher(str);
Set<String> result = new HashSet<String>();//can also be a list or whatever
while(m.find()){
result.add(m.group(1));
}
捕获组也可以是整个正则表达式,以包含{{
和}}
,因此"(\\{\\{t.*?\\}\\})"
答案 1 :(得分:3)
如何(使用非贪婪的匹配,以便它找不到“:word word | word}}单词{{t:word | word”
String s = "word word word {{t:word word|word}} word word {{t:word|word}} word word";
Pattern p = Pattern.compile("\\{\\{t:(.*?)\\}\\}");
Matcher m = p.matcher(s);
while (m.find()) {
//System.out.println(m.group(1));
System.out.println(m.group());
}
编辑:
更改为m.group(),以便结果包含分隔符。
答案 2 :(得分:0)
这对我有用:
import java.util.regex.*;
class WordTest {
public static void main( String ... args ) {
String input = "word word word {{t:word word|word}} word word {{t:word|word}} word word...";
Pattern p = Pattern.compile("(\\{\\{.*?\\}\\})");
Matcher m = p.matcher( input );
while( m.find() ) {
System.out.println( m.group(1) );
}
}
}