我正在尝试解析命令行。这就是问题:LQ,MM和FP与小吃一起疯狂,账单在LQ上。MM吃两个小吃,每个花费10美元,一个花费12美元,LQ吃两个花费10美元,而FP只有一个花费10美元。费用可以这样:
62|MM+2*3,LQ*2,FP
其中62是总价。我需要在他们的特定对象中划分每个人必须支付的正确金额。如何只用一个Pattern来解决这个问题。甚至在这一点上,任何可能的解决方案对我都有帮助。记住+和*可以是任何用户。这就是我尝试过的
Pattern.compile(“^ [([\ d] +([\ d] {2}))\ |??? - (([AZ] {2}){1}([AZ] {2}) *)(\ S \ “(+?)\”)$“)?;
我的问题是如何为每个用户获得+2或* 3等单独的可选命令?
发布于 2019-05-27 11:10:28
我会假设操作在人之后(例如LQ+2*3
有效,但2*MM+3
不是。)我也会假设+
之前的操作*
。不幸的是,没有办法拥有动态数量的捕获组,因此我假设有三个人。
有这些限制,(\d+)\|([A-Z]+)(\+\d+)?(\*\d+)?,([A-Z]+)(\+\d+)?(\*\d+)?,([A-Z]+)(\+\d+)?(\*\d+)?
应该工作 - 捕获组是这样的:
1:开头的数字(62
在您的情况下)
2:此人(MM
在您的情况下)
3 :(可选)“+”符号后面的数字,前面加一个(+2
在您的情况下)
4 :(可选) '*'后面的数字,*
前面有一个(*3
在你的情况下)
5以后:重复2-4
(例如你的情况下的群组['62', 'MM', '+2', '*3', 'LQ', '*2', 'FP']
)
但是,如果您想要具有动态人数的东西,最好的方法是简单地用逗号分割并解析每个人([A-Z]+)(\+\d+)?(\*\d+)?
。
https://stackoverflow.com/questions/-100006810
复制相似问题