【发布时间】:2019-10-13 07:21:44
【问题描述】:
我正在尝试匹配这样的字符串:62.00|LQ+2*2,FP,MD*3 "Description"
其中十进制值为2位可选,每个用户以两个Chars为特征,后跟
(\+[\d]+)?或 (\*[\d]+)?或没有,或两者兼而有之,或两者的顺序不同
喜欢:
LQ*2+4 |长Q+4*2 |长Q*2 | LQ+8 |量产
描述也是可选的
我试过的是这样的:
Pattern.compile("^(?<number>[\\d]+(\\.[\\d]{2})?)\\|(?<users>([A-Z]{2}){1}(((\\+[\\d]+)?(\\*[\\d]+)?)|((\\+[\\d]+)?(\\*[\\d]+)?))((,[A-Z]{2})(((\\+[\\d]+)?(\\*[\\d]+)?)|((\\+[\\d]+)?(\\*[\\d]+)?)))*)(\\s\\\"(?<message>.+)\\\")?$");
我需要获取所有用户,以便我可以将它们按“,”拆分,然后进一步正则表达式进入其中。但我无法从中获取任何内容。来自
的所需输出62.00|LQ+2*2,FP,MD*3 "说明"
应该是:
62.00
LQ+2*2,FP,MD*3
说明
接受的输入应该是这样的:
62.00|LQ+2*2,FP,MD*3
30|LQ “汉堡”
35.15|LQ*2,FP+2*4,MD*3+4 "土豆"
35.15|LQ,FP,MD
【问题讨论】:
-
您能否提供几个具体的示例字符串以及预期的输出应该是什么?很难理解你在问什么
-
@Misantorp 我编辑了它..
-
为什么不在
|上拆分62.00|LQ+2*2,FP,MD*3 "Description"?这将为您提供62.00和LQ+2*2,FP,MD*3 "Description",因此您已经拥有number部分。然后将 one (first) 空间上的第二部分拆分为两部分(通过split(" ", 2)得到LQ+2*2,FP,MD*3"Description",这样即使描述有更多空格,它也会在一个字符串中。然后用逗号分隔LQ+2*2,FP,MD*3以获取每个玩家。 -
@Pshemo 因为我不知道用户是否会在它的位置放一个数字或其他东西..
-
我的印象是您的正则表达式仅用于将有效字符串 分隔 到稍后将通过命名组访问的部分。但是现在您提到您的字符串还可以包含其他不正确的数据。您能否将这些信息添加到您的问题中,可能带有示例?
标签: java regex regex-lookarounds regex-group regex-greedy