如何在Java中使用正则表达式

时间:2015-10-01 03:16:24

标签: java regex

我需要将这样的字符串分开:

C-USD10.00_FRIES AND BURGUER_USD15.00

在这样的团体中

segment = first_char;
subtotal_currency = after-next_3_chars;
subtotal = digits_up_to_;
description = text_up_to_;
total_curency = next_3_char;
total = last_digits;

我想用一种方式表示它是这样的:

 (?P<segment>[A-Z])-(?P<scurr>[A-Z]{3})(?P<subtotal>\d+(?:,\d{1,2})?)_(?<desc>^\s*[a-zA-Z,\s]+\s*$)_(?P<curr>[A-Z]{3})(?P<total>\d+(?:,\d{1,2})?)

预期结果将是:

segment = "C";
subtotal_currency = "USD";
subtotal = 10.00;
description = "FRIES AND BURGUER";
total_curency = "USD";
total = 15.00;

如何在java中使用正则表达式以这种方式划分字符串?

顺便说一句,我必须为许多类型的字符串做这个工作......所以我想使用正则表达式会对我有很大帮助。

2 个答案:

答案 0 :(得分:1)

正则表达式位于java.util.regex包中。

看起来你有正确的想法。根据Pattern和Matcher类的documentation,您需要从模式中删除的唯一内容是?之间的P?并且&lt;对于命名组,如下所示:

(?<segment>[A-Z])-(?<scurr>[A-Z]{3})(?<subtotal>\d+(?:,\d{1,2})?)_(?<desc>^\s*[a-zA-Z,\s]+\s*$)_(?<curr>[A-Z]{3})(?<total>\d+(?:,\d{1,2})?)

创建Pattern对象,然后在String上调用.matcher()以获取Matcher。然后,您可以使用.group(String)方法从Matcher中提取信息。

您可以轻松地使系统具有通用性,但对您的域名有所帮助。

答案 1 :(得分:0)

(?P<segment>[A-Z])-(?P<scurr>[A-Z]{3})(?P<subtotal>\d+(?:[.,]\d{1,2})?)_(?<desc>\s*[a-zA-Z,\s]+\s*)_(?P<curr>[A-Z]{3})(?P<total>\d+(?:[.,]\d{1,2})?)
                                                          ^^                                                                           ^^           

试试这个。看看演示。

https://regex101.com/r/fX3mH8/2

的问题:

1)将.,一起添加。

2)从中间字符串中删除了^$