我需要将这样的字符串分开:
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中使用正则表达式以这种方式划分字符串?
顺便说一句,我必须为许多类型的字符串做这个工作......所以我想使用正则表达式会对我有很大帮助。
答案 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)从中间字符串中删除了^$
。