0

如何在java中为下面类似的句子编写正则表达式,并且应该只匹配句子的前三个字符

ins(clear(icl>remove>do,plf>thing,obj>thing,ins>thing).@entry.@past,evidence(icl>indication>thing))

我尝试了这段代码,但它也与句子中的明确证据相匹配....

String pattern2="[-a-z0-9R:._-`&=*'`~\"\\+[\\s]]+[\\(]";  

Pattern r2 = Pattern.compile(pattern2);
Matcher m2 = r2.matcher(line);


 while (m2.find()) 
 {
     rel = m2.group();
     rel = rel.substring(0, rel.length()-1).trim();                 
     System.out.println("The relation are " + rel); 
 }
4

4 回答 4

1

如果您只想从行首获得匹配,您可以^在正则表达式的开头添加(之前[)。

如果您想确保之前匹配的部分(有 3 个字符,请不要使用..]+but ..]{3}

此外,如果您只想检查某些字符是否在有趣的部分之后,但又不想包含它们,请使用(?=...)像您的情况(?=[\\(])或更简单的前瞻机制-(?=[(])无需同时(转义。\\[]

所以也许改变你的模式

String pattern2 = "^[-a-z0-9R:._-`&=*'`~\"+\\s]{3}(?=[(])";

另外我不确定_-`你的意思是否是因为它会在_和之间创建字符范围`

于 2013-10-10T13:47:10.940 回答
1

此正则表达式匹配前 3 个字符:

^...
于 2013-10-10T13:47:49.097 回答
1

我想你应该首先删除所有非字母

String result = string.replaceAll("[^a-zA-Z]", "");

然后只取前三个符号:

result.substring(0, 3)
于 2013-10-10T13:46:09.463 回答
0

这个...

String pattern2="^[^\\(]+";
于 2013-10-10T13:42:13.500 回答