如何解决如何从不同的捕获组中的可选子模式匹配中分离出连续的十进制值?
我有以下输入文本:
22 JUNPaypal *XPTO USD 11,99Conversão: USD 1 = R$ 5,5666,67
使用此正则表达式:
(\d{2}\s{1}(?:JAN|FEV|MAR|ABR|MAI|JUN|JUL|AGO|SET|OUT|NOV|DEZ))(.*?)(?<!(?:USD|BRL|R\$)\s.?)((?:\d+\.)*?\d+,\d{2})
我可以生成以下3个捕获组(以管道分隔以举例说明):
22 JUN|Paypal *XPTO USD 11,|5666,67
但是我真的想要的是以下三个捕获组:
22 JUN|Paypal *XPTO USD 11,56|66,67
这是使用ECMAScript引擎的实时演示: https://regex101.com/r/UBMtdH/1/
注释
- 整个字符串由上述几个序列组成
- “ 11,99美元的兑换:1美元= 5,56雷亚尔”是可选的,因此它可能不会发生(因此?
- 值可以有千个分隔符(例如:1.234,56)
- 值将始终仅具有2个小数位
- 使用.NET正则表达式引擎
解决方法
在匹配月份缩写后,您可以至少匹配至少一个字符,并通过在重复的捕获组中将数字与2个小数匹配来使用.net captures属性。
在模式末尾,使用正向前移来声明字符串的末尾,或断言以2位数字和一个月缩写开头的另一部分。
(\d{2}\s(?:JAN|FEV|MAR|ABR|MAI|JUN|JUL|AGO|SET|OUT|NOV|DEZ))(.*?)(\d+,\d{2})+(?=$|\s*\d{2}\s(?:JAN|FEV|MAR|ABR|MAI|JUN|JUL|AGO|SET|OUT|NOV|DEZ))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。