正则表达式匹配包含非字母数字字符的单词
我想匹配并查找由空格或特殊字符包围的单词的索引。例如:正则表达式匹配包含非字母数字字符的单词
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]
我想你需要什么你的情况使用lookarounds:
(?<!\p{Alnum})test(?!\p{Alnum})
负回顾后(?<!\p{Alnum})
将失败的比赛,如果有存在的test
左边的字母数字字符,并且如果在test
之后存在字母数字字符,则否定前瞻(?!\p{Alnum})
将会使匹配失败。
见测试截图:
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());
}
替代办法:比赛和捕捉到的搜索词,并打印1日开始位置捕获组:
Pattern ptrn = Pattern.compile("\\P{Alnum}(test)\\P{Alnum}");
...
System.out.println(matcher.start(1));
看到这个Java demo
注意,在这种情况下,\P{Alnum}
是消费模式,并在一些边缘情况,test
可能不会得到匹配。
虽然我不清楚这个问题(对不起!),这正是我想要的!非常感谢! – Maxsteel
对于那些只需要字母字符而非字母数字的人,可以使用'“(?
@DatNguyen:注意'\ p {Alpha}默认情况下仅使用ASCII字母(如果您未指定'Pattern.UNICODE_CHARACTER_CLASS'标志)。要匹配任何Unicode字母而不依赖于标志,请使用'“(?
我只是想了解你的问题。您正在寻找被特殊角色(包含)或空间包围的test
? 但你说this is#input_ : True
。我不确定我是否挑选了这个错误,但在那种情况下如何是真的?
无论如何,我已经得到了正则表达式[\W\s_](input|test)[\W\s_]
匹配所有您定义为true的情况。
- \ W匹配任何非单词
- \ s任何空白
- _匹配任何下划线匹配 - 必须建立在自己的定义,因为这是一个字
- 从我所提到的试验的困惑我有正则表达式搜索输入和测试
此外我用户this网站随时与我正确的工作,因为我觉得它非常有用。
不知道这是你想要的答案,但让我知道,如果我错了,我会再试一次
这是一个不同的情况下,因为在我的情况,#test_应该返回测试指标并不#TEST 。 – Maxsteel
“_”是一个单词,不是特殊字符。此外,'这是#input_'不能是'True',那里有'test'这个词在那里?测试用例中缺少'#test_'。 –
*非字母数字。此外,在一场比赛中,我想要“测试”的索引。所有其他的例子给出了完整的匹配! – Maxsteel