我有一个名为
付款 - 谢谢 - 50.00 美元。
我想将此值拆分为
付款 - 谢谢你是关键
和价值为
- 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])");
http://rubular.com/r/MDHPux502R
?
考虑到首先存在的事实,我怀疑它-
是可选的,
要使第一组不贪婪,您可以?
在+
Pattern.compile("([a-zA-Z \\-? a-zA-Z]+)(-?\\$[0-9|,]*\\.[0-9][0-9])");
Try the next:
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);
}
Output:
PAYMENT - THANK YOU
-$50.00
And:
我不确定您要使用\\-?
模式中的部分来完成什么,但这应该可行:
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])"
您的正则表达式在第一个字符组中捕获了 - 。