我使用正则表达式匹配以下输出字符串:
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
如果我使用相同的正则表达式匹配输出字符串,则它不匹配。
有什么方法可以修复这个问题吗?
答案 0 :(得分:0)
强烈建议您将|
上的每个字符串拆分并将其转换为可以解析的对象。
但是如果你只是想用正则表达式解析它,你可以使用它:
^ *person *(?<person>.*?) *\| *age *(?<age>.*?) *\| *(?<someMarker>.*?) *\|gender *(?<gender>.*)$
请注意,在Java中,您需要两次转义反斜杠,因此示例中的\|
将变为\\|
。
另外请确保您使用的是regex case insensitive modifier。