例如,我有一个具有值的字段
String a="Items:#1000#,#2000#";
为此,我开发了成功获取值 1000 和 2000 的逻辑。
Pattern p = Pattern.compile("\\#(.*?)\\#");
Matcher m = p.matcher(a);
while(m.find()){
System.out.println(m.group(1));
}
一切正常!!!
但是我对一些值有疑问,这些值不应只考虑一个 # 符号和后面的两个 ## 符号。 例如:
String a="Items:#1 #1000#,#2000#";
这个值1不应该被考虑!!!
但我的代码在这种情况下返回 1
和 ,
这不好,它应该再次返回 1000
和 2000
是否有可能以某种方式忽略仅用一个 # 的值?不幸的是,我有很多值在双 ## 符号之前有一个 #?
值始终用 ##
和 coma
最佳答案
以下模式仅匹配由 #
包围并后跟逗号或字符串末尾的字符串:
Pattern p = Pattern.compile("#([^#]*)#(?=(,|$))");
如果您还希望匹配换行符等字符,则可以在最后的括号中添加更多字符(在 ?=
之后)。
我没有在 Java 中测试它,仅在 Notepad++ 中测试,但两者都使用相同的正则表达式算法。
关于Java - 获取两个 # # 符号之间的值时出现问题(匹配模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26426464/