如果输出格式正在改变,如何使用正则表达式来匹配输出

时间:2014-01-30 16:41:04

标签: java regex

我使用正则表达式匹配以下输出字符串:

person1 | Age 20 | M |Gender Male
person2 | Age 11 |   |Gender Female
person3 | Age 23 | M |Gender Female
person4 | Age 32 |   |Gender Male
person5 | Age 41 | M |Gender Male
person11| Age 28 | M |Gender Female
person12| Age 31 | M |Gender Male
person10| Age 33 |   |Gender Male
person8 | Age 26 |   |Gender Male

在java代码中,我使用以下的exgex来匹配上面的输出:

"person[^\n]*1Age 20[^\n]*M[^\n]*Gender Male[^\n]*" +
"person3[^\n]*Age 23[^\n]*M[^\n]*Gender Female[^\n]*" +
"person5[^\n]*Age 41[^\n]*M[^\n]*Gender Male[^\n]*"   +
"person11[^\n]*Age 28[^\n]*M[^\n]*Gender Female[^\n]*"  +
"person12[^\n]*Age 31[^\n]*M[^\n]*Gender Male[^\n]*"

但问题是每次输出字符串并不总是以相同的顺序,有时看起来像:

person1 | Age 20 | M |Gender Male
person2 | Age 11 |   |Gender Female
person3 | Age 23 | M |Gender Female
person4 | Age 32 |   |Gender Male
person11| Age 28 | M |Gender Female
person12| Age 31 | M |Gender Male
person5 | Age 41 | M |Gender Male
person10| Age 33 |   |Gender Male
person8 | Age 26 |   |Gender Male

如果我使用相同的正则表达式匹配输出字符串,则它不匹配。

有什么方法可以修复这个问题吗?

1 个答案:

答案 0 :(得分:0)

强烈建议您将|上的每个字符串拆分并将其转换为可以解析的对象。

但是如果你只是想用正则表达式解析它,你可以使用它:

^ *person *(?<person>.*?) *\| *age *(?<age>.*?) *\| *(?<someMarker>.*?) *\|gender *(?<gender>.*)$

http://regex101.com/r/pA4eP7

请注意,在Java中,您需要两次转义反斜杠,因此示例中的\|将变为\\|

另外请确保您使用的是regex case insensitive modifier