我希望匹配并找到由空格或特殊字符包围的单词索引。例如:
To find: test
this is input test : True
this is#input_ : True
this isinput : False
thisisinputtest: False
this @test is right: True.
我如何匹配并查找索引。我目前的正则表达式失败了:(?i)[^a-zA-Z0-9]test[^a-zA-Z0-9]
答案 0 :(得分:3)
我认为你需要在你的案例中使用外观:
(?<!\p{Alnum})test(?!\p{Alnum})
如果(?<!\p{Alnum})
左侧存在字母数字字符,那么负面后瞻test
将使匹配失败,如果存在,则否定前瞻(?!\p{Alnum})
将使匹配失败test
之后的字母数字字符。
查看测试截图:
String str = "this is#test_ :";
Pattern ptrn = Pattern.compile("(?<!\\p{Alnum})test(?!\\p{Alnum})");
Matcher matcher = ptrn.matcher(str);
while (matcher.find()) {
System.out.println(matcher.start());
}
替代方式:匹配并捕获搜索词,并打印第一个捕获组的开始位置:
Pattern ptrn = Pattern.compile("\\P{Alnum}(test)\\P{Alnum}");
...
System.out.println(matcher.start(1));
请参阅此Java demo
注意在这种情况下,\P{Alnum}
是消费模式,在某些边缘情况下,test
可能无法匹配。
答案 1 :(得分:0)
我只是想了解你的问题。您正在寻找被特殊字符(包含_)或空格包围的test
?
但是你说this is#input_ : True
。我不确定我是否选错了,但在那种情况下情况如何呢?
无论如何,我有正则表达式[\W\s_](input|test)[\W\s_]
,它匹配所有定义为true的情况。
我也可以随时与Regex合作使用this网站,因为我发现它很有用。
不确定这是否是您要找的答案,但如果我错了就告诉我,我会再试一次