2013-02-12 41 views
0

我想解析具有特定模式的字符串。有效字符串示例如下:正则表达式或字符串解析

<STX><DATA><ETX> 
<STX>A?123<ETX> 
<STX><DATA><ETX> 
<STX>name!xyz<ETX> 
<STX>age!27y<ETX> 
<STX></DATA><ETX> 
<STX>A?234<ETX> 
<STX><DATA><ETX> 
<STX>name!abc<ETX> 
<STX>age!24y<ETX> 
<STX></DATA><ETX> 
<STX>A?345<ETX> 
<STX><DATA><ETX> 
<STX>name!bac<ETX> 
<STX>age!22y<ETX> 
<STX></DATA><ETX> 
<STX>OK<ETX> 
<STX></DATA><ETX> 

此数据由设备发送。我所需要的是解析这个字符串的id:123名称:xyz,年龄27岁。

我试图用这个表达式:

最终格局正则表达式= Pattern.compile(,Pattern.DOTALL “(*)?”)

这并输出所需要的数据:

<ETX> 
<STX>A?123<ETX> 
<STX><DATA><ETX> 
<STX>name!xyz<ETX> 
<STX>age!27y<ETX> 
<STX> 

我怎样才能循环串递归复制所有到字符串列表。 我想循环并删除提取的模式,但它不会删除。

final Pattern regex = Pattern.compile("<DATA>(.*?)</DATA>", Pattern.DOTALL);// Q?(.*?) 
    final StringBuffer buff = new StringBuffer(frame); 
    final Matcher matcher = regex.matcher(buff); 
    while (matcher.find()) 
     { 
      final String dataElements = matcher.group(); 
      System.out.println("Data:" + dataElements); 
     } 
    } 

是否有任何无法做到这一点的方法。

这是我目前得到的输出:

Data:<DATA><ETX><STX>A?123<ETX><STX><DATA><ETX><STX>name!xyz<ETX><STX>age!27y<ETX><STX> </DATA> 
Data:<DATA><ETX><STX>name!abc<ETX><STX>age!24y<ETX><STX></DATA> 
Data:<DATA><ETX><STX>name!bac<ETX><STX>age!22y<ETX><STX></DATA> 

我缺少在接下来的两场比赛将A 234和A 345?。

+1

** ** PACK?....,你想与string..your问题做什么做的是不清楚.. – Anirudha 2013-02-12 17:20:01

+0

...或XML解析? – maerics 2013-02-12 17:21:46

+1

您提供的字符串上应用的模式'(。*?)'怎么会返回这样的输出?这真的不清楚。尝试应用[SSCCE](http://sscce.org/)概念。 – sp00m 2013-02-12 17:22:56

回答

0

我真的不知道你想通过这个达到什么,但如果要删除该模式的occurances这一行:

​​

不好看。你只是编辑该buff的字符串表示。你必须再次将编辑后的版本替换回buff(投射后)。

+0

@ikshvak现在解决了吗? – Hossein 2013-02-12 18:19:52

+0

是的,我在上面添加了我的答案。 – Ikshvak 2013-02-12 18:27:15

0

使用这个表达式可以解决我的问题:

<STX>(A*)(.*?)<DATA>(.*?)</DATA>