Java - 获取两个 # # 符号之间的值时出现问题(匹配模式)

标签 java regex

例如,我有一个具有值的字段

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, 这不好,它应该再次返回 10002000

是否有可能以某种方式忽略仅用一个 # 的值?不幸的是,我有很多值在双 ## 符号之前有一个 #? 值始终用 ##coma

分隔

最佳答案

以下模式仅匹配由 # 包围并后跟逗号或字符串末尾的字符串:

Pattern p = Pattern.compile("#([^#]*)#(?=(,|$))");

如果您还希望匹配换行符等字符,则可以在最后的括号中添加更多字符(在 ?= 之后)。

我没有在 Java 中测试它,仅在 Notepad++ 中测试,但两者都使用相同的正则表达式算法。

关于Java - 获取两个 # # 符号之间的值时出现问题(匹配模式),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26426464/

相关文章:

java - sql准备语句和java

java - 我怎样才能获得语言环境?

regex - jmeter.extractor.RegexExtractor : Error in pattern

regex - Shell/AWK - 它不显示值,以及如何添加 reg exp

java - 在构造函数中调用方法是一个好习惯吗?

Java - 函数作为参数

java - 括号中字母或数字的正则表达式

javascript - 如果是逗号,则从字符串中删除第一个字符

javascript - 从任何类型的网址中提取域名

java - Java图像显示可以选择电脑上的显卡吗?