Java 如何从模糊模式中提取子字符串

Java 如何从模糊模式中提取子字符串,java,regex,string,Java,Regex,String,我需要提取字符串的某个部分,但该字符串的模式可能会有所不同 我们所说的字符串定义了一组属性,即[name=value]对。例如: "a=somevalueb=othervaluec=lastvalue" 我需要获取属性b的值(“其他值”)。但是,属性的顺序不是指定的。此外,某些属性(包括b)可能根本不存在。最大的问题是属性不一定(但可能!)被任何东西分开,所以我不能拆分然后只得到以“b=”开头的块。我需要在整个字符串中找到属性 我知道的是: 字符串中可能包含哪些属性 每个属性最多只能发生一次

我需要提取字符串的某个部分,但该字符串的模式可能会有所不同

我们所说的字符串定义了一组属性,即[name=value]对。例如:

"a=somevalueb=othervaluec=lastvalue"
我需要获取属性b的值(“其他值”)。但是,属性的顺序不是指定的。此外,某些属性(包括b)可能根本不存在。最大的问题是属性不一定(但可能!)被任何东西分开,所以我不能拆分然后只得到以“b=”开头的块。我需要在整个字符串中找到属性

我知道的是:

  • 字符串中可能包含哪些属性
  • 每个属性最多只能发生一次(但可能根本不会发生)
  • 当然,我知道我要提取的属性
到目前为止,我最好的办法是首先切断“b=(使用indexOf()和substring())之前的任何内容,然后对所有已知的属性名称进行循环,检查是否包含此属性,然后以某种方式将其切断

但我觉得可能有更优雅的方式。我尝试了一些正则表达式,但不知道提取什么(group(???)),因为字符串模式可能会有所不同


谢谢你的建议!(顺便说一句:如果有必要的话,可以用Java实现)

很容易找到您要寻找的值的开头。诀窍是找到结尾,因为你的文本格式不好

根据您的描述,该值要么在文本末尾结束(显然),要么在另一个已知键存在时结束

b=(.*?)(?=a=|c=|d=|e=|$)
跟进

要在“属性值可以包含换行符”(来自注释)时工作,有两种方法:

  • 将标志指定为要删除的第二个参数
  • 在正则表达式中打开标志:
    (?s)b=(.*)(=a=| c=| d=| e=|$)

键/值对是否由某个已知字符分隔?正如您所写的,看起来一对中的值与下一对中的键合并在一起。真的是这样吗?是的,不幸的是,我没有可以分割的角色。嘿,谢谢!我试过类似的方法,但不知怎么的,我被小组搞糊涂了。但是,我对“$”有一个问题,因为属性值实际上可以包含换行符。“字符串结尾”的字符是什么?我知道了:我必须将:(.*)替换为:((.|\n |\r)*?)对不起,更好的是:按您所说的那样离开,并为模式(java)启用Pattern.DOTALL模式