Java中需要正则表达式
我有一个行项目叫做 付款-谢谢-50.00美元 我想将此值拆分为 付款-谢谢你的钥匙 和价值作为 -50美元 我写正则表达式如下Java中需要正则表达式,java,regex,Java,Regex,我有一个行项目叫做 付款-谢谢-50.00美元 我想将此值拆分为 付款-谢谢你的钥匙 和价值作为 -50美元 我写正则表达式如下 Pattern.compile("([a-zA-Z \\-? a-zA-Z]+)(-?\\$[0-9|,]*\\.[0-9][0-9])"); 但是我得到了钥匙作为付款-谢谢-价值50.00美元 谁能帮我一下正则表达式出了什么问题吗?为什么会这样,是因为第一个块有一个贪婪的正则表达式。第一组捕获-,仅仅是因为它被允许 解决这个问题的一件事是删除-之后的?,强制-位于
Pattern.compile("([a-zA-Z \\-? a-zA-Z]+)(-?\\$[0-9|,]*\\.[0-9][0-9])");
但是我得到了钥匙作为付款-谢谢-价值50.00美元
谁能帮我一下正则表达式出了什么问题吗?为什么会这样,是因为第一个块有一个贪婪的正则表达式。第一组捕获
-
,仅仅是因为它被允许
解决这个问题的一件事是删除-
之后的?
,强制-
位于第二个正则表达式中
Pattern.compile("([a-zA-Z \\-? a-zA-Z]+)(-\\$[0-9|,]*\\.[0-9][0-9])");
考虑到
?
首先存在的事实,我怀疑-
是可选的
要使第一组非贪婪,您可以在+
Pattern.compile("([a-zA-Z \\-? a-zA-Z]+)(-?\\$[0-9|,]*\\.[0-9][0-9])");
我不确定您想用模式中的
\\-?
部分实现什么,但这应该是可行的:
Pattern.compile("([a-zA-Z -]*[a-zA-Z ])(-?\\$[0-9|,]*\\.[0-9][0-9])");
除非另有规定,否则在可能的情况下,数据倾向于放在前面的字段中 您需要做的是指定第一个字段的最后一个字符不能是破折号:
Pattern.compile("([a-zA-Z -? a-zA-Z]+[^-])(-?\\$[0-9|,]*\\.[0-9][0-9])");
试试这个:
"([a-zA-Z -]+)(-?\\$[0-9|,]*\\.[0-9][0-9])"
您的正则表达式正在捕获第一个字符组中的-。请尝试下一个:
public static void main(String[] args) {
Pattern pattern = Pattern.compile("([\\S ]*[^-])(-?\\$[\\d,]*\\.\\d{2}).*");
String line = "PAYMENT - THANK YOU-$50.00.";
Matcher matcher = pattern.matcher(line);
String key = matcher.replaceAll("$1");
String value = matcher.replaceAll("$2");
System.out.println(key);
System.out.println(value);
}
输出:
PAYMENT - THANK YOU
-$50.00
以及:
更好地解释你在做什么。如果你的线路总是一样的,只需在已知索引处拆分即可。您在
you-
中匹配-
的原因与在支付-感谢
之间匹配-
的原因相同,这是因为您在第一个字符集中说过要匹配-
。描述各不相同,但将通过-So子字符串删除使用(-)是否有任何理由不简单地在“付款-谢谢”上分开。而完全跳过注册码?