有什么方法可以使用Java显示除了一组单词或数字范围之外的所有字符和字符串?例如:
正则表达式:
^(if|else),[0-9]
输入字符串:
if x <= 7
输出:
无法识别的代币:
x , <=
由于“if
”和7
被否定,它们将不会出现。
我可以在一个正则表达式中否定一组字符串和数字范围吗?
或者有没有其他方法可以显示不匹配的字符串?
我们的任务是显示识别的标记,然后显示不匹配的标记。我已经研究和研究了三天的正则表达式,但我仍然无法完成我的任务。提前感谢您的帮助。
答案 0 :(得分:1)
我会使用String.split()将字符串拆分为标记,然后将每个标记与“过滤器列表”进行比较。
即使您可以使用正则表达式完成此操作,也不会那么简单。
修改强>
实际上,您甚至可能不需要遍历结果。您可能会拆分“过滤”字样。例如:
String[] results = s.split(" *if *| *else *| *[0-9]+ *| +");
请注意,您必须在表达式中放置一个空格,因为我假设您不希望x <=
成为结果中的单个标记。此外,在关键字周围添加空格将确保您的结果集中不会出现空字符串。
答案 1 :(得分:1)
根据问题的复杂程度,您可以尝试使用否定前瞻断言:
\b((?!if|else|\d)\w+)\b
或者是lookbehind和negative lookahead的一些疯狂组合:
((?<=\A|\s)(?!if|else|\d)\S+)
答案 2 :(得分:0)
是的,我必须将lexemes(if,else,main)归类为tokens(关键字) 0-9为NUM,依旧......
\ b((?!if | else | \ d)\ w +)\ oops,我的不好,它确实有效。我不小心删了|