-1

我有一个名为

付款 - 谢谢 - 50.00 美元。

我想将此值拆分为

付款 - 谢谢你是关键

和价值为

- 50.00 美元。

我写的正则表达式如下

Pattern.compile("([a-zA-Z \\-? a-zA-Z]+)(-?\\$[0-9|,]*\\.[0-9][0-9])");

但我得到的钥匙是付款 - 谢谢 - 价值为 50.00 美元,任何人都可以帮助我正则表达式有什么问题

4

5 回答 5

7

你得到这个的原因是因为第一个块有一个贪婪的正则表达式。第一组捕获-只是因为它被允许。

解决它的一件事是删除?之后-,迫使-进入第二个正则表达式

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])");

http://rubular.com/r/In9M650QcB

于 2013-06-28T20:15:00.127 回答
0

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:

enter image description here

于 2013-06-28T20:45:10.360 回答
0

我不确定您要使用\\-?模式中的部分来完成什么,但这应该可行:

Pattern.compile("([a-zA-Z -]*[a-zA-Z ])(-?\\$[0-9|,]*\\.[0-9][0-9])");
于 2013-06-28T20:15:53.533 回答
0

除非另有说明,否则数据倾向于放在更早的字段中,如果可能的话。

您需要做的是指定第一个字段的最后一个字符不能是破折号:

Pattern.compile("([a-zA-Z -? a-zA-Z]+[^-])(-?\\$[0-9|,]*\\.[0-9][0-9])");
于 2013-06-28T20:17:33.133 回答
0

尝试这个:

"([a-zA-Z -]+)(-?\\$[0-9|,]*\\.[0-9][0-9])"

您的正则表达式在第一个字符组中捕获了 - 。

于 2013-06-28T20:18:03.357 回答