【问题标题】:Regex to correctly match currency part in a string [duplicate]正则表达式正确匹配字符串中的货币部分[重复]
【发布时间】:2021-10-01 09:37:30
【问题描述】:

我想把这种字符串分成3组

"02.01. 02.01. Pay card PN:123                                        6562,58 S"

group1 应该匹配“02.01.02.01.”

group2 应该匹配“支付卡 PN:123”

group3 应该匹配“6562,58 S”(这部分可以根据数量变化,即 1,99 H)

我的正则表达式看起来像这样

^([0-9][0-9]\.[0-9][0-9]\. [0-9][0-9]\.[0-9][0-9]\.)(.*)(\d+\,[0-9][0-9].*)

但是 group3 只会匹配“2,58 S”而不是“6562,58 S”

什么是正确的正则表达式?

【问题讨论】:

  • 不要使用(.*)来匹配间隙,而是使用仅排除数字的东西,例如([^0-9]+)

标签: c# regex


【解决方案1】:

.* 是贪心的,所以会尽可能匹配。要么让它不贪婪,要么不使用.,而是使用\s

我也会使正则表达式尽可能具体,即包含已知字符串。由于您似乎知道 \d,因此出于可读性原因,我将使用它而不是 [0-9]

^(\d\d\.\d\d\. \d\d\.\d\d\.)\s+(Pay card PN:\d+)\s+(\d+,\d\d [HS])$

这样你会注意到你的输入何时发生变化,你可能需要修改正则表达式

^                             beginning of line
(\d\d\.\d\d\. \d\d\.\d\d\.)   dates
\s+                           whitespace as separator
(Pay card PN:\d+)             card number
\s+                           white space as separator
(\d+,\d\d [HS])               amount
$                             end of line

Check it in RegexStorm.NET

【讨论】:

  • @MikeM:是的,我同意。逗号后的货币可能没有 3 位数字
猜你喜欢
  • 1970-01-01
  • 2022-11-26
  • 1970-01-01
  • 1970-01-01
  • 2015-10-25
  • 2010-09-15
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
相关资源
最近更新 更多